python爬蟲如何按序抓取一個頁面上的圖文?

網上的教程幾乎都是只抓取文本或者只抓取圖片。如果想抓取一個既有圖片也有文字的網頁。希望輸出的是圖片還在原來相對於文字的的位置出現。這樣可以做到嗎


答案是可以做到的,事情是這樣的,我和幾個同學打算做一個針對大四畢業生的網站,所以需要整合學校官網的校園招聘信息(只抓取校園招聘不要網投簡歷的)我在抓取學校官網的校園招聘信息時就遇到了這個問題。我採取的方法是抓取圖片的鏈接,這個鏈接一般是沒有主域名的,比如

如果只是抓取整個html的話是不會顯示出圖片的,因此抓取該鏈接然後再加上主域名然後再放回到html標籤中即可。效果如下圖所示:

代碼參考:

import requests
import re
from bs4 import BeautifulSoup as bs

def crawl_all_main_url(page=10):
# 默認抓取官網前十頁招聘信息的url
all_url_list = []
for _ in range(1, page+1):
url = "http://zjc.ecit.edu.cn/jy/app/newslist.php?BigClassName=%D5%D0%C6%B8%D0%C5%CF%A2Page={0}".format(_)
page_html = requests.get(url).text
x_url_reg = re.compile("&(.*?)&")
explain_text = re.findall(explain_text_reg, html)[0]
if ("時間" and "地點") in explain_text:
return True
else:
pass

def save_html():
all_url_list = crawl_all_main_url()
for son_url in all_url_list:
if get_title(son_url):
text_html = requests.get(son_url).content.decode("gbk")
domain_url = "http://zjc.ecit.edu.cn/jy"
img_url_reg = re.compile("border=0 src="..(.*?)"")
child_url = re.findall(img_url_reg, text_html)
if child_url != []:
img_url = domain_url + child_url[0]
re_url = "src="..{0}"".format(child_url[0])
end_url = "src="{0}"".format(img_url)
end_html = text_html.replace(re_url, end_url)
soup = bs(end_html, "lxml")
text_div = soup.find_all("div", id="main")[0]
with open("./{0}.html".format(son_url[-11:]), "wb") as file:
text_html = "&U職網提供數據諮詢服務 & & & & {0} &".format(text_div)
file.write(text_html.encode("utf-8"))
else:
with open("./{0}.html".format(son_url[-11:]), "wb") as file:
html = requests.get(son_url).content.decode("gbk")
soup = bs(text_html, "lxml")
text_div = soup.find_all("div", id="main")[0]
text_html = "&U職網提供數據諮詢服務 & & & & {0} &".format(text_div)
file.write(text_html.encode("utf-8"))
else:
continue

if __name__ == "__main__":
save_html()


文字 和 圖片 當然是按序列來的,不然 他後台也無法做到正常的匹配,留意一下標籤


推薦閱讀:

如何用爬蟲下載中國土地市場網的土地成交數據?
用python爬拉鉤網關於『數據分析』工作的信息為什麼都是空的?
如何使用爬蟲獲取新加坡PSI信息?
爬蟲是不是用 Node.js 更好?
為什麼寫的爬蟲只能爬取一幅圖,而不能全部下載所有圖片?

TAG:Python | 網頁爬蟲 |