爬蟲流程
用requests 獲取目標網址的url 連結 --> 發起 html request --> 獲得html file 後解釋 html (lxml Xpath/Beautiful soup/RE)–> save to mysql / mongoDb 儲存/excel csv
JSON
name & value pairs 作儲存數據
獲取url連結方法
import requests
r = requests.get("url連結") #調用get method 獲取html源碼 #get(url, params=None, **kwargs)
#HTTP请求的返回状态,比如,200表示成功,404表示失败
print (r.status_code)
#HTTP请求中的headers
print (r.headers)
#从header中猜测的响应的内容编码方式
print (r.encoding)
#从内容中分析的编码方式(慢)
print (r.apparent_encoding)
#响应内容的二进制形式
print (r.content)
在requests庫調用時更改user agent
在調用r = requests.get(“url”) 時user agent 會有python字樣, 此時需要模擬browser 訪問
e.g.
head = {}
#写入User Agent信息
head[‘User-Agent’] = ‘Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19’
r = requests.get(“url”, headers= headers)
使用不同IP地址進行訪問
#这是代理IP
proxy = {‘http’:‘106.46.136.112:808’}
#创建ProxyHandler
proxy_support = request.ProxyHandler(proxy)
requests庫
r.request.get(url)後
r.encoding #output編碼
r.text #output html內容
r.status.code #返回請求狀態碼
r.url #返回url連結
r.raise_for_status() #如狀態碼不是200, 則拋出異常
解釋html方法
1.Beautiful soup
2.Xpath
Xpath 語法:
參考https://blog.csdn.net/lovemenghaibin/article/details/82898280
// -->從全局節點中選擇節點 如//a
/ -->從當前節點下選擇節點 如/a
@ -->選取節點屬性 如/a@title
. -->接著下來的節點 如 ./a@title 接datas = html_for_xath.xpath("//div[@class=‘el’]/p/
需要調用lxml庫
先pass html內容給etree parser
selector = etree.HTML(content)
再從xpath中抽取指定數據 (類似re)
‘Name’: div.xpath(‘dl/dd[1]/a/text()’)[0] #這裡指的是dl part中的第一個dd part dd[1] --> 再選取 a part --> 再a part 的text
e.g.1
selector = etree.HTML(content)
ALL = selector.xpath('//*[@id="f_mew_list"]/div[6]/div[1]/div[3]/div[1]/div')
for div in ALL:
yield {
'Name': div.xpath('dl/dd[1]/a/text()')[0],
'Type': div.xpath('dl/dd[2]/span[1]/text()')[0],
'Area': div.xpath('dl/dd[2]/span[3]/text()')[0],
'Towards': div.xpath('dl/dd[2]/span[5]/text()')[0],
'Floor': div.xpath('dl/dd[2]/span[7]/text()')[0].strip().replace('\n', ""),
'Decorate': div.xpath('dl/dd[2]/span[9]/text()')[0],
e.g. 2 Xpath解釋html庫
html1 = etree.HTML(r.text)
#定位到每一个商品标签li
datas=html1.xpath(’//li[contains(@class,“gl-item”)]’)
3.re
with open
https://docs.python.org/3/tutorial/inputoutput.html
爬虫框架
Scrapy