版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhao_5352269/article/details/82252066
使用scrapy框架爬取美团的信息
响应的数据基本有用的都在js里,城市数据全在一个json里,需要取出该json里面的省和市
为了匹配市一级的数据,利用读取配置文件的方式,匹配美团中市数据,获取url中的简拼
通过Python中的configparser模块读取配置,代码里的参数都没写,需要自己学习
import configparser
cf = configparser.ConfigParser()
cf.read()
cf.get()
碰到读取不到这个配置文件的错误,scrapy框架中第一次使用这个,最后发现是路径问题,scrapy运行时的路径是项目的根目录。修改路径后解决。将配置文件ini放在了项目的根目录
第二:
获取数据的时候,会去爬取下一页的数据,需要拼接下一页的url,然后再parse中去request拼接好的url,所以利用request.meta方法传递数据,理论上该方法可以传递任何类型的数据
def start_requests(self):
for i in range(len(self.urls)):
request = scrapy.Request(url=self.urls[i], callback=self.parse)
# 通过request的meta方法传递城市id(meta方法可以传递任何类型的数据)
request.meta['city_id'] = self.city_ids[i]
yield request
def parse(self, response):
item = StreetItem()
county_city_id = response.meta['city_id']
第三:
就是防止403错误,请求美团的数据,会碰到403错误,在setting中添加一下代码
'''
伪造一个用户信息,防止403
'''
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
ITEM_PIPELINES = {
'Tencent.pipelines.TencentPipeline': 300,
}
'''
防止403崩溃。
'''
HTTPERROR_ALLOWED_CODES = [403]
第四:
关于在scrapy中使用MongoDB数据库,如何搭建看https://blog.csdn.net/zhao_5352269/article/details/82151173,
首先要确保MongoDB数据库可以远程连接,当然如果在本机上就不用考虑此问题
在setting设置
在管道文件pipelines配置
有问题,请留言,目前暂时就碰到这些问题,
在pycharm中直接运行爬虫的方法,不用每次去跑cmd
在跟目录底下建立main.py文件
from scrapy import cmdline
# 将运行的log信息全部打印到all.log文件
cmdline.execute("scrapy crawl 自己项目爬虫的名字 -s LOG_FILE=all.log".split())