您现在的位置:首页 >> 品牌家居

Python Scrapy 单项实战

发布时间:2025/09/04 12:17    来源:涡阳家居装修网

item['li']=pv('//*[@]' + pl_str).extract()[0] if str(pv('//*[@]'+pl_str).extract())=="[]": item['b5'] = '' else: item['b5']=pv('//*[@]' + pl_str).extract()[0] yield item#计算机系统在收得各个关键字的items前,则会可先检视紧接之前所有的request链表里面的催促,然后再行浓缩items

首可先导入我们必需的包:

import datetimeimport sysimport requestsimport scrapyimport timeimport jsonimport scrapy.httpfrom peilv.items import PeilvItemfrom lxml import etree

name = ‘FBP’是定义踩收概念设计名称,以便通过命令scrapy crawl FBP -o BaseData.csv换收资料。

start_requests

向 发送催促。(你可以弹出这个网址,里面边是踩虫类计算机系统踩收资料的最大块网站) scrapy.http.FormRequest 法则: 第一个匹配是催促的具体网址; 第二个匹配是下一步线程的变量; 第三个匹配 meta 是向线程变量发送至的匹配。

parseLs (parseWl 所谓,不再行重复讲到解)

主要运用于解析次大块其网站资料。这里面用 XPath 解析,也是相对很难掌握的解析方式。其网站构造如下:(通过 Google 客户端弹出 然后鼠标首页其网站空白处首页“检视其网站源编译器”,找到你必需踩收的核心资料大多,这里面我要找每场决赛的电子邮件,那么拷贝下来,然后以难于检视的规整方式列于,如下:)

... 0 周三001 北单018 ......

parseLS变量里面的下面编译器,用sel代表response.xpath,结合诏命里面 xml 里面的元素:换收了决赛场次,存储到item[‘cc’]。

def parseLs(self,response): sel=response.xpath sel_div=sel('//li[@]/div[@class="clearfix-row"]') if str(sel_div.xpath('span[@class="lab-lottery"]/span[@class="text-jc"]/text()').extract()) == "[]": item['cc']="" else: item['cc']=str(d2) + str(sel_div.xpath('span[@class="lab-lottery"]/span[@class="text-jc"]/text()').extract()[0])

此外,还要换收决赛的赛果电子邮件,但十分在理论上这个其网站,而在更内层的其网站里面,必需从理论上其网站重定向。 存储赛果的内层其网站为 ,相异场次的决赛只有-后边的数字是变化的,那么计算机系统里面只要循环构造相异的数字2674547就好了。发现这个数字刚才是 ]/@data-id').extract()]for raceid in racelist: plurl=''+raceid[0] request = scrapy.http.FormRequest(plurl,callback=self.parse,meta={'item':item}) yield request

在Request里面投身于meta,需将meta发送至给response。再行审核该其网站催促到下一个变量parse。这里面必需注意:parse里面既送去item又作运用于新的request。

平时在parse里面return item需送去item,return request则作运用于新的request催促。如果我们将return换为yield的话需既送去item又作运用于新的request。注意一旦运运用于了yield,那么parse法则里面就无法有return了。

parse

其网站构造如下:(通过Google客户端弹出 然后鼠标首页其网站空白处首页“检视其网站源编译器”,拷贝必需赛果的大多到文本文档,字符串操作后如下:

...... 1.620 3.600 5.250 ......

通过表列于编译器换收赛果,首可先由上一个变量parseLs通过scrapy.http.FormRequest(plurl,callback=self.parse,meta={‘item’:item})线程到下面的parse法则,传入plurl链接相异的其网站内容response, 同样用response.xpath放进td里面class为”bd-left”下面div里面class为”begin float-left w-bar-100 bd-bottom p-b-8 color-999 m-b-8”再行下面span里面class为”float-left col-3”的值。

def parse(self, response): print('--------------into parse----------------------') item = response.meta['item'] pv=response.xpath pl_str = '/td[@class="bd-left"]/div[@class="begin float-left w-bar-100 bd-bottom p-b-8 color-999 m-b-8"]/span[@class="float-left col-3"]/text()' if str(pv('//*[@]'+pl_str).extract())=="[]": item['li'] = '' else: item['li']=pv('//*[@]' + pl_str).extract()[0] if str(pv('//*[@]'+pl_str).extract())=="[]": item['b5'] = '' else: item['b5']=pv('//*[@]' + pl_str).extract()[0] yield item#计算机系统在收得各个关键字的items前,则会可先检视紧接之前所有的request链表里面的催促,然后再行浓缩items

再行通过//*判断所有>这里面综合讲到一下parse法则岗位机制:因为运运用于的yield,而不是return。parse变量将则会被看作一个作运用于器运运用于。

scrapy则会须要换收parse法则里面作运用于的结果,如果是request则投身于踩收链表,如果是item类型则运运用于pipeline检视,其他类型则送去错误电子邮件。

scrapy收到第一大多的request不则会立马就去发送这个request,只是把这个request放到链表里面,然后接着从作运用于器里面换收;

收尽第一大多的request,然后再行换收第二大多的item,收到item了,就则会放到相异的pipeline里面检视;

parse()法则作为回调变量(callback)语句给了Request,指定parse()法则来检视这些催促 scrapy.Request(url, callback=self.parse);

Request都可经过控管,继续执行作运用于 scrapy.http.response()的响应都可,并送去给parse()法则,直到控管器里面没有Request(递归的思维);

计算机系统在收得各个关键字的items前,则会可先检视紧接之前所有的request链表里面的催促,然后再行浓缩items。

以上过程Scrapy引擎和控管器将负责其实。

阐释

以上我们充分利用了一个踩虫类实战概念设计,通过分析其网站构造,借助 Scrapy 框架换收资料,为今后的资料分析花钱作准备。

上海眼科哪家医院最好
广州好的妇科专科医院
青岛好的牛皮癣专科医院
武汉白癜风专家
新乡看妇科去哪里
牙龈肿痛
手脚出汗
咳嗽咽痛吃什么药?
慢性支气管炎咳嗽怎么治
骨癌

上一篇: 美国银行业信贷规模升至2021年3月以来的最高水平

下一篇: WTI原油期货日内涨幅缩减至4%

友情链接