Scrapy框架-阳光政务平台爬虫二
Scrapy框架-阳光政务平台爬虫(二)
想要爬取的网站:微信读书
爬取内容:各个排行榜中的 书名 作者名 详情页网站 评分 出版社 出版日期
文末有工程文件
items.py设置
-
配置items.py文件
- items.py文件中NameItem(scrapy.Item)类中写入
name = scrapy.Field() author = scrapy.Field() grade = scrapy.Field() press = scrapy.Field() publish_date = scrapy.Field() detail_url = scrapy.Field()
- 这一部分相当于整合信息条目,而且方便检查在写爬虫文件时的拼写错误
setting.py设置
- 开启并修改网络代理
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Edg/96.0.1054.29' # agent可以在浏览器中任意页面的检查中找一个
- 添加日志打印等级
LOG_LEVEL = "WARNING"
- 开启pipeline交互,若不开启,爬虫文件的数据就无法传递给pipeline.py文件
ITEM_PIPELINES = { 'yangguang.pipelines.YangguangPipeline': 300, }
主爬虫内容
- 代码
import scrapy import re from ..items import WxbookItem class WxSpider(scrapy.Spider): name = 'wx' allowed_domains = ['weread.qq.com'] start_urls = ['https://weread.qq.com/web/category/'] # 爬取的榜单页面 def parse(self, response): # 1.大分类分组 li_list = response.xpath('//ul[@class="ranking_list"]/li') for li in li_list: item = WxbookItem() rank_url = 'https://weread.qq.com' li.xpath('./a/@href').extract_first() # 各榜单url # print(rank_name_1, rank_href_1) yield scrapy.Request( rank_url, callback=self.parse_rank_0, # 回调详情页爬虫程序 meta={"item": item} # 传递item数据 ) def parse_rank_0(self, response): item = response.meta["item"] # 2.小分类分组 div_list = response.xpath('//div[@class="ranking_page_header"]/div/div') num_0 = re.sub("\D", "", response.url) rank_num = 0 rank_url_2 = [] try: for div in div_list: # 根据页面url构造分榜单url rank_num = 1 for num in range(rank_num): rank_url_2.append('https://weread.qq.com/web/category/' str(int(num_0) num)) for url in rank_url_2: yield scrapy.Request( url, callback=self.parse_rank_1, # 回调详情页爬虫程序 meta={"item": item} # 传递item数据 ) except: pass def parse_rank_1(self, response): item = response.meta["item"] li_list = response.xpath('//ul[@class="ranking_content_bookList"]/li') for li in li_list: # 分榜单页提取部分信息和详情页url item["author"] = li.xpath('./div[1]/div[2]/p[2]/a/text()').extract_first() item["grade"] = li.xpath('./div[1]/div[2]/p[3]/span[3]/span/text()').extract_first() item["detail_url"] = 'https://weread.qq.com' li.xpath('./a/@href').extract_first() # print(item) yield scrapy.Request( item["detail_url"], callback=self.parse_detail, # 回调详情页爬虫程序 meta={"item": item} # 传递item数据 ) def parse_detail(self, response): item = response.meta["item"] item["detail_url"] = response.url # 提取剩余信息 item["name"] = response.xpath('//div[@class="bookInfo_right"]/h2/div/text()').extract_first() item["author"] = response.xpath('//div[@class="bookInfo_right"]/div/a/text()').extract_first() item["press"] = response.xpath('//div[@class="wr_dialog"]/div/div/div[2]/span[2]/text()').extract_first() item["grade"] = response.xpath('//div[@class="book_ratings_container"]/div[2]/div[1]/span[1]/text()').extract_first() item["publish_date"] = response.xpath('//div[@class="wr_dialog"]/div/div/div[3]/span[2]/text()').extract_first() print(item)
- 几点注意事项
- 一定要导入item类,否则无法保存信息
- allowed_domains一定要写对,特别是自己定义的函数(parse_detail)所用的url一定要在allowed_domains的范围内,否则会不执行回调函数。
比如回调函数请求网站:[https://book.douban.com/top250?start=1]
而allowed_domains = [“douban.com”] 就无法正常回调
pipeline.py设置
- 代码
class WxbookPipeline: def process_item(self, item, spider): print(item["name"]) return item
自定义run.py
- 之前的文章说过,跑scrapy程序需要在命令行中输入scrapy crawl xxx
这种在命令行中的交互方式实在不方便,那我们在工程目录下定义一个run.py文件就可以直接在pycharm里运行这个run.py文件就能实现在pycharm里进行交互了。 - 代码
from scrapy import cmdline cmdline.execute('scrapy crawl wx'.split())
结果
{'author': '黑格尔',
'detail_url': 'https://weread.qq.com/web/reader/bbe32a1072051bbdbbed499',
'grade': ' 90.0',
'name': '精神现象学·上卷(汉译世界学术名著丛书)',
'press': '商务印书馆',
'publish_date': '1979年6月'}
链接: 工程文件
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfifbe
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01