scrapy分页抓取网页( 自动爬取网页存储代码如下:.py:属性)
优采云 发布时间: 2021-12-17 08:28scrapy分页抓取网页(
自动爬取网页存储代码如下:.py:属性)
最后得到生成的网页链接。并致电请求重新申请此网页的数据
所以在管道中。我们还需要修改存储的代码。具体如下。您可以看到这里没有使用JSON,直接打开txt文件进行存储
class Test1Pipeline(object):
def __init__(self):
self.file=''
def process_item(self, item, spider):
self.file=open(r'E:\scrapy_project\xiaoshuo.txt','wb')
self.file.write(item['content'])
self.file.close()
return item
完整的代码如下:这里需要注意两次yield的用法。在第一次屈服后,它将自动转到test1pipeline进行数据存储,然后在存储后获得下一个网页。然后通过请求获取下一个网页的内容
class testSpider(Spider):
name="test1"
allowd_domains=['http://www.xunsee.com']
start_urls=["http://www.xunread.com/article/8c39f5a0-ca54-44d7-86cc-148eee4d6615/1.shtml"]
def parse(self, response):
init_urls="http://www.xunread.com/article/8c39f5a0-ca54-44d7-86cc-148eee4d6615"
sel=Selector(response)
context=''
content=sel.xpath('//div[@id="content_1"]/text()').extract()
for c in content:
context=context+c.encode('utf-8')
items=Test1Item()
items['content']=context
count = len(sel.xpath('//div[@id="nav_1"]/a').extract())
if count > 2:
next_link=sel.xpath('//div[@id="nav_1"]/a')[2].xpath('@href').extract()
else:
next_link=sel.xpath('//div[@id="nav_1"]/a')[1].xpath('@href').extract()
yield items
for n in next_link:
url=init_urls+'/'+n
print url
yield Request(url,callback=self.parse)
有一种更方便的自动抓取网页的方法:crawlespider
前面描述的爬行器只能在URL中的开始网页上进行解析。虽然自动爬行的规则也在前一章中实现。但有点负责任。爬行爬行器可用于自动抓取划痕中的网页
爬行规则的原型如下:
上流社会的。contrib。蜘蛛。规则(link\u提取器,callback=None,cb\u kwargs=None,follow=None,process\u links=None,process\u request=None)
链接抽取器:它的功能是定义如何从已爬网的页面中提取链接
Callback指的是一个调用函数,每当从linkextractor获取链接时,都会调用该函数进行处理。回调函数接受响应作为第一个参数。注意:使用crawlespider时,不允许将parse作为回调函数。因为crawlspider使用parse方法来实现逻辑,所以使用parse函数将导致调用失败
Follow是一个判断值,指示是否需要跟踪从响应中提取的链接
以scratch shell中的提取为例
LinkedExtractor中的Allow仅适用于href属性:
例如,以下链接仅提取href属性的正则表达式
结构如下:您可以获得各种链接
您可以使用restrict\uxpath对每个链接进行如下限制:
示例2:以前面的xunread网络为例
提取网页中下一节的地址:
网址: