Python爬虫系列:Scrapy爬取实例(End~)
2021年07月16日 00:00 __ _ _ _ _

内观自己,摆脱焦虑。

大家好,我是小 Bob,一个关注软件领域而又执着于计算机底层的开发者~
emmm,最近开始准备Java的文章,关于Python爬虫的文章也决定告一段落,那么这里小编决定给大家再来分析一下关于Scrapy.
目录:
1.编写一个工程和spider模板
2.编写spider
3.编写Item Pipeline
4.优化配置策略
1.编写一个工程和spider模板
列出相关命令:
scrapy startproject BaiduStocks
cd BaiduStocks
scrapy genspider stocks baidu.com
->进一步修改spiders/stocks.py文件
2..编写Spider
对Spider编写包括以下处理:
配置stocks.py文件
修改对返回页面的处理
修改对新增URL爬取请求的处理
我们在BaiduStocks\BaiduStocks\spiders文件目录下找到stocks.py文件,打开并修改。修改代码如下;
import reimport scrapyclass StocksSpider(scrapy.Spider): name = 'stocks' start_urls = ['http://quote.eastmoney.com/stocklist.html']
def parse(self, response): for href in response.css('a::attr(href)').extract(): try: stock=re.findall(r"[s][hz]\d[6]",href)[0] url= 'https://gupiao.baidu.com/stock/'+stock+'.html' yield scrapy.Request(url,callback=self.parse_stock) except: continue
def parse_stock(self,response): infoDict={} stockInfo=response.css('.stock-bets') name=stockInfo.css('.bets-name').extract()[0] keyList=stockInfo.css('dt').extract() valueList=stockInfo.css('dd').extract() for i in range(len(keyList)): key =re.findall(r'>.*</dt>',keyList[i])[0][1:-5] try: val=re.findall(r'\d+\.?.*</dd>',valueList[i])[0][0:-5] except: val='--' infoDict[key]=val
infoDict.update( { '股票名称':re.findall('\s.*\(',name)[0].split()[0]+\ re.findall('\>.*\<,name')[0][1:-1] } ) yield infoDict
3.编写Item Pipeline
编写Pipelines需要进行以下处理:
1.配置Pipelines.py文件
2.定义对爬取项(Scrapy Item)的处理类
3.配置ITEM_PIPELINES选项
from itemadapter import ItemAdapterclass BaidustocksPipeline(project): def process_item(self, item, spider): return item
class BaiduStocksInfoPipeline(project): def open_spider(self,spider): self.f=open('BaiduStockInfo.txt','w')
def close_spider(self,spider): self.f.close()
def process_item(self,item,spider): try: line=str(dict(item))+'\n' self.f.write(line) except: pass return item
在运行爬虫之前还需对setting.py文件进行修改:
在上述文件中找到相关选项,并去掉注释,加上Info。如下:
ITEM_PIPELINES = { 'BaiduStocks.pipelines.BaiduStocksInfoPipeline': 300,}
最后运行需执行如下命令:
scrapy crawl stocks
4.优化配置策略
settings.py文件配置 :(选项以及说明)
CONCURRENT_REQUESTS Downloader:最大并发请求下载数量,默认32
CONCURRENT_ITEMS Item Pipeline:最大并发ITEM处理数量,默认100
CONCURRENT_REQUESTS_PER_DOMAIN:每个目标域名最大的并发请求,默认8
CONCURRENT_REQUESTS_PER_IP:每个目标IP最大的并发请求数量,默认0,非0有效
Python爬虫系列,未完待续…


为你,千千万万遍.
往期推荐:
Python爬虫系列:何为Scrapy框架? 2021-07-13
Windows11如何将任务栏图标变小 2021-07-09
一键三连,就差你了
预览时标签不可点
阅读
__











