1. 程式人生 > >scrapy專利爬蟲(三)——簡單實際操作

scrapy專利爬蟲(三)——簡單實際操作

scrapy專利爬蟲(三)——簡單實際操作

確定連結

在chrome中開啟審查元素中的network選項,檢視查詢專利時傳送的請求。觀察後發現在每次查詢的時候,瀏覽器都會先發送兩條請求給伺服器。

傳送相關請求

經過觀察發現,網站的查詢流程是

  • 先發送不帶引數的post請求preExecuteSearch!preExcuteSearch.do將ip地址傳給伺服器
  • 然後再發送biaogejsAC!executeCommandSearchUnLogin.do將查詢引數發給伺服器

填寫表單,傳送請求

這裡只給出一個簡單的例子,具體實現見github或程式碼附件

headers = {
    "Content-Type": "application/x-www-form-urlencoded"
}
searchExp = SearchService.getCnSearchExp(self.startDate, proposer, inventor, type)
formData = {
    "searchCondition.searchExp": searchExp,
    "searchCondition.dbId": "VDB",
    "searchCondition.searchType": "Sino_foreign",
    "searchCondition.power"
: "false", "wee.bizlog.modulelevel": "0200201", "resultPagination.limit": BaseConfig.CRAWLER_SPEED } yield FormRequest( url="http://www.pss-system.gov.cn/sipopublicsearch/patentsearch/biaogejsAC!executeCommandSearchUnLogin.do", callback=self.parsePatentList, method="POST", headers=headers, formdata=formData, meta={ 'searchExp'
: searchExp, 'inventionType': type, 'startDate': self.startDate, 'proposer': proposer, 'inventor': inventor } )

資料解析

通過觀察chrome的Element,可以逐個找出我們所需要的元素,例如:

本工程使用beautifulsoup進行解析,對於帶class的元素,使用find(attrs={"class": "className"})的方法採集即可,其他引數也類似。這裡提供簡單的例子

itemSoup = BeautifulSoup(item.prettify(), "lxml")
header = itemSoup.find(attrs={"class": "item-header"})
pi['name'] = header.find("h1").get_text(strip=True)
pi['type'] = header.find(attrs={"class": "btn-group left clear"}).get_text(strip=True)
pi['patentType'] = QueryInfo.inventionTypeToString(type)
content = itemSoup.find(attrs={"class": "item-content-body left"})

資料收集

同樣的需要對item使用yield,然後將資料傳入pipeline中進行處理,關於更多資料處理的詳細內容將會在下節內容中介紹。

原始碼下載

讚賞
微信支付 支付寶
微信 支付寶