这个爬虫实例采用Scrapy的框架,理解来不是很好,需要理解其框架的执行过程才行,这次边看边写出来一天的时间用来调试找bug,真是写代码半小时,差错数小时。错在三个地方,都是那个粗心啊,一个group(0)后小括号写成了中括号!一个是正则表达式后少了个符号!一个是.findall()写错,正确应该是.find_all()!
下面这个代码区域由注释组成,旨在梳理编写爬虫的大框架,梳理思路。后面两个截图是详细代码。
#股票数据Scrapy爬虫实例
#功能描述:
# 技术路线:Scrapy
# 目标:获取上交所和深交所所有股票的名称和交易信息
# 输出:保存到文件中。
#
#获得股票代码URL:http://quote.eastmoney.com/stock_list.html
#获得具体股票信息URL:https://xueqiu.com/S/SZ300783
#步骤:
# 步骤1.建立工程和Spider模板
# 在命令行依次使用下面三个命令:
# scrapy startproject XueqiuStocks
# cd XueqiuStocks
# scrapy genspider stocks xueqiu.com
# 进一步修改stocks.py
# 步骤2:编写Spider
'''
start_urls = ['http://quote.eastmoney.com/stock_list.html']
def parse(self, response):
for href in response.css('a::attr(href)').extract():
try:
stock = re.search(r'[s][hz]\d{6}',href).group(0)
stock = stock.upper()
url = 'https://xueqiu.com/S/' + stock
yield scrapy.Request(url,callback = self.parse_stock)
except:
continue
def parse_stock(self,response):
infoDict = {}
name = re.search(r'<div class=\"stock-name\">(.*?)</div>',response.text).group(1)
infoDict.update({'股票名称':name.__str__()})
tableHtml = re.search(r'\"tableHtml\":\"(.*?)\",',response.text).group(1)
soup = BeautifulSoup(tableHtml,"html.parse")
table = soup.table
for i in table.find_all('td'):
line = i.text
l = line.split(":")
infoDict.update({l[0].__str__():l[1].__str__()})
yield infoDict
'''
# 步骤3:编写ITEMPipelines
# 配置pipelines.py文件
# 定义对爬取项(Scraped Item)的处理类。
'''
#自定义一个Pipeline
class XueqiustocksInfoPipeline(object):
def open_spider(self,spider):
self.f = open("XueqiuStocksInfo.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
'''
# 配置ITEM_PIPELINES选项
# 在settings.py中修改
# ITEM_PIPELINES = { 'XueqiuStocks.pipelines.XueqiustocksInfoPipeline': 300,}
# USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6'
# CONCURRENT_REQUESTS = 16
# 步骤4.运行爬虫,在命令行输入:scrapy crawl stocks
完整代码如下:
另外还需要设置的settings.py中修改的部分:
ITEM_PIPELINES = {
'XueqiuStocks.pipelines.XueqiustocksInfoPipeline': 300,
}
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'
详细的这个scrapy框架编写爬虫实例,见这篇博文https://blog.csdn.net/weixin_43978546/article/details/105117901,讲得那不是一般的详细,几乎把嵩天老师的视频从头到尾,结合实际情况,图文并茂形象描述了出来。
这个博主写文很少确用MARKDOWN标记用的淋漓尽致,佩服,曾经诺诺同学和骏豪同学也是同款,感谢这些博主的无私奉献和乐于分享。