scrapy框架入门
scrapy框架入门(二)实现翻页请求并将数据存入mogodb
通过找一个招聘网站,爬取对应页面的信息同时学习实现翻页的方法
一、翻页是什么,如何实现?
爬虫作为获取数据的一种方法,对网址请求的时候,常常涉及翻页操作,今天我们来用scrapy实现翻页。
现在先假设我们创建了一个scrapy项目,并且可以获得第一页我们所需要的信息,现在需要实现翻页去获取其他页面的信息。
一般情况下,我们的思路是找到当前页面中下一页的按钮,点击进行翻页。在scrapy中,我们翻页需要把翻页的网址从spider中传递到调度器scheduler。所以我们的任务就在于如何从spider中拿到网址,包装成Request,通过引擎传递到scheduler。
二、实现步骤
1.引入库
先把代码发出来吧(示例):
class YnzppcSpider(scrapy.Spider):
name = 'ynzppc'
allowed_domains = ['ynzp.com']
start_urls = ['https://www.ynzp.com/search/offer_search_result.aspx?jcity1Hidden=330000&page=1']
#数据爬取部分
def parse(self, response):
div_list = response.xpath('//div[@id="ListView"]/div')
for div in div_list:
item = {}
item['title'] = div.xpath("./div[1]/a/text()").extract_first()
#如何去除/n/r
item['salary'] = div.xpath("./div[1]/div/text()").extract_first()
item['company'] = div.xpath("./div[2]/a/text()").extract_first()
yield item
# pass
#找到下一页的URL地址
#发现爬取的数据比较少,查找后发现xpath有变化,后一页并不都是处于span[8]待解决
#通过xpath去找页面中后一页的按钮,不同页面需要自己分析
next_page_url = response.xpath('//*[@id="ctl00_ContentPlaceHolder1_PageControl"]/td[2]/div[1]/span[7]/a/@href').extract_first()
if bool(next_page_url)==True:
next_url = 'https://www.ynzp.com/search/' next_page_url
#拿到网址后将其包装为Request对象,回调parse函数继续爬取,这里的前提是后一页爬取的数据和结构没有改变
#若是后面一页的数据或者xpath发生了改变则需要重新定义新的parse1函数针对性的爬取
yield scrapy.Request(
next_url,
callback=self.parse
)
print(next_page_url,'urlnext')
2.存储数据
代码如下(示例):
from pymongo import MongoClient
#实例化MongoClient
client = MongoClient()
#创建数据库中对应的信息
collection = client['ynzp']['job']
class YnzpPipeline:
def process_item(self, item, spider):
#在数据库中插入数据
collection.insert(item)
return item
存在的问题
实现的过程中发现的问题:
- 爬取的薪资存在/r/n等,如何去除这些修饰符
- 爬取网站的时候,发现数据没有想象中的多,检查发现是不同页面下一页对应的xpath存在差异,并不固定,如何实现动态绑定下一页是一个问题。
- 在爬取网站的时候,Obey robots.txt 经常导致报错,即网站不允许爬取部分数据,因此有些数据无法爬下来,如果非要爬取可以修改setting中ROBOTSTXT_OBEY = False。
先埋个坑,后续跟进
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgcecjj
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01