python爬蟲采集
最近有個項目需要采集一些網站網頁,以前都是用php來做,但現在十分流行用python做采集,研究了一些做一下記錄。
采集數據的根本是要獲取一個網頁的內容,再根據內容篩選出需要的數據,
python的好處是速度快,支持多線程,高並發,可以用來大量采集數據,缺點就是和php相比,python的輪子和代碼庫貌似沒有php全,而且python的安裝稍微麻煩了點,折騰了好久。
python3的安裝見連接:
https://www.cnblogs.com/mengzhilva/p/11059329.html
工具編輯器:
PyCharm :一款很好用的python專用編輯器,可以編譯和運行,支持windows
python采集用到的庫:
requests:用來獲取網頁的內容,支持https,用戶登錄信息等,很強大
lxml:用來解析采集的html內容,十分好用,比較靈活,但很多用法不好找,api文檔不好找。
pymysql:連接操作mysql,這個就不用說了,將采集到的信息存到數據庫。
基本上這三個就可以支持采集網頁
安裝代碼:
用pip安裝調用代碼:
pip install pymysql
pip install requests
pip install lxml
采集數據:
采集的代碼和打印的結果:
# coding=utf-8 #設置頁碼編碼,解決中文亂碼
import re
import pymysql
import requests
from mydb import *
from lxml import etree
#模擬瀏覽器訪問
headers = {
'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'
}
#requests獲取網頁
respose = requests.get('https://www.cnblogs.com/mengzhilva/', headers=headers)
content = respose.text #獲取內容
html = etree.HTML(content) #用lxml格式化
result = etree.tostring(html, encoding='utf-8') # 解析對象輸出代碼
titles = html.xpath('//div[@class="day"]//div[@class="postTitle"]//a/text()') #查找相應數據
url = html.xpath('//div[@class="day"]//div[@class="postTitle"]//a/@href') #查找相應數據
print(titles)
print(url)
i=1
for val in titles:
url = html.xpath('//div[@class="day"][' + format(i) + ']//div[@class="postTitle"]//a/@href') # 根據循環查找列表地址
print(val)
print(url)
#這里可以調用單獨的函數來抓取詳情頁內容
i+=1