python-requests 簡單實現數據抓取

安裝包:
  requests,lxml
request包用於進行數據抓取,
lxml用來進行數據解析
對於對網頁內容的處理,因爲html自己並不是如數據庫同樣爲結構化的查詢所見即所得,因此須要對網頁的內容進行分析而後進行內容提取,lxml就是用來完成此項工做
在requests中最用的方法爲get()方法,一般狀況下能夠將url作爲參數傳入進去,對於一些功能比較完善的網站若是存在反爬取數據的功能是則須要設置headers參數內容,內容爲一字典類型
能夠在瀏覽器中查看User-Agent字段的內容,設置後requests將在抓取數據時同時提交所設置的頭信息以進行瀏覽器的訪問模擬
同時在抓取數據時要注意網站所使用的字符編碼,當編碼不一至時須要對字符編碼進行相應的轉換
具體見如下代碼註釋
#!/usr/bin/python
# encoding: utf-8
import requests
from lxml import etree


url='http://www.chinanews.com/scroll-news/mil/2017/0110/news.shtml'

def getNewUrlList():
global url
header ={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36'}    構造瀏覽器頭信息
response=requests.get(url,headers=header)   獲取數據
html=response.content.decode("gbk")    解碼
selector=etree.HTML(html)
contents = selector.xpath('//div[@id="content_right"]/div[@class="content_list"]/ul/li[div]')    使用xpath語法解析獲取數據//表示從根開始查找@後跟相應的html屬性
for eachlink in contents:
url = eachlink.xpath('div/a/@href')[0] if str(eachlink.xpath('div/a/@href')[0]).__contains__("http") else "http://www.chinanews.com"+eachlink.xpath('div/a/@href')[0]
title = eachlink.xpath('div/a/text()')[0]
ptime = eachlink.xpath('div[@class="dd_time"]/text()')[0]
yield (title,url,ptime)

def getNewContent(urlList):
for title,url,ptime in urlList:
response=requests.get(url,headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36'})
html=response.content.decode("gbk")
selector=etree.HTML(html)
title=selector.xpath("//div[@id='cont_1_1_2']/h1/text()")[0]
source=selector.xpath("//div[@id='cont_1_1_2']/div[@class='left-time']/div[@class='left-t']/text()")[0]
content=selector.xpath("//div[@id='cont_1_1_2']/div[@class='left_zw']/p/text()")

i=0
resultContent=''
for item in range(0,content.__len__()):
resultContent+=content[i]
i+=1
yield (title,source,resultContent)

if __name__=="__main__":
urlList= getNewUrlList()
result= getNewContent(urlList)
for title,source,content in result:
print u"標題:%s"%title
print u"來源:%s"%source
print u"正文:%s"%content
相關文章
相關標籤/搜索