scrapy分页抓取网页(PythonScrapy爬虫框架很久了,、Pycharm框架详解)
优采云 发布时间: 2021-12-18 09:00scrapy分页抓取网页(PythonScrapy爬虫框架很久了,、Pycharm框架详解)
想长期学习Python Scrapy爬虫框架。最近通过在线课程对Scrapy有了初步的了解。使用的工具主要是Anaconda3、Pycharm。现在我分享以下内容:
顾名思义,爬虫是一种自动抓取互联网信息的程序。通过此程序后,您可以使用互联网数据来分析和开发产品。
URL管理模块:对计划爬取或已经爬取的URL进行管理。网页下载模块:访问和下载URL管理模块中指定的URL。网页分析模块:解析网页下载模块中的URL,处理或保存数据。如果解析URL继续爬取,则返回URL管理模块继续循环。一个开源的 Python 爬虫框架,用于爬取网站并从页面中提取结果。快速而强大,只需编写少量代码即可完成抓取任务。安装: conda install -c conda-forge scrapy。检查是否安装成功:scrapy bench通用开发及编写步骤(1)创建项目:scrapy startproject教程(自定义名称)(2)define Item,Construct crawled objects(1)
项目介绍:通过Python Scrapy框架抓取pm25.in上全国各大城市的空气质量数据,下载到本地CSV文件中。
项目第一步:创建项目。在项目文件夹的DOS命令行输入scrapy startproject教程,目录下会生成如下文件,包括蜘蛛、项目、管道、设置等基本重要文件:
创建项目教程
项目第二步:通过对网站的查看和初步分析,找到感兴趣的数据字段,定义ITEM,根据项目需要获取的数据字段定义Item,即定义类城市项目。
使用浏览器工具对网页和字段进行初步分析
编写items.py程序
项目第三步:创建一个Spider。在命令行界面下输入scrapy genspider aqispider pm25.in,框架会根据这个命令根据基础模板生成aqi_spider
项目第四步:编写AqiSpider的主程序,即网页下载和网页分析。
编写主程序最重要的解析函数
def parse(self,response):
bs = BeautifulSoup(response.body,'lxml') #通过BeautifulSoup函数解析网页内容
div_obj = bs.find('div',class_='all') #获取目标对象的div
li_tag_list = div_obj.find_all('li') #获取包含城市名称和链接的div
for li_tag in li_tag_list:
city_item = CityItem() #定义一个CityItem对象
city_item['city_name'] = li_tag.find('a').text #获取城市名
city_link = 'http://www.pm25.in' + li_tag.find('a')['href'] #由于该网页中href对应的是一个部分二级链接地址,因此需要拼接完整地址
city_item['city_link'] = city_link #保存链接到链接字段
yield scrapy.Request(city_link, #通过该语句跳转至二级链接的解析
meta={'item':city_item}, #利用meta来传递CityItem对象
callback = self.parse_city_link, #通过callback调用二级网址解析函数parse_city_link
dont_filter = True)
def parse_city_link(self,response):
city_item = response.meta['item']
bs = BeautifulSoup(response.body,'lxml')
print('正在爬取',city_item['city_name'])
data_div_tag = bs.find('div',class_='span12 data')
value_div_tag_list = data_div_tag.find_all('div',class_='value')
city_item['aqi'] = float(value_div_tag_list[0].text)
city_item['pm2S'] = float(value_div_tag_list[1].text)
city_item['pm10'] = float(value_div_tag_list[2].text)
city_item['co'] = float(value_div_tag_list[3].text)
city_item['no2'] = float(value_div_tag_list[4].text)
city_item['o3_1h'] = float(value_div_tag_list[5].text)
city_item['o3_8h'] = float(value_div_tag_list[6].text)
city_item['so2'] = float(value_div_tag_list[7].text)
yield city_item #利用yield爬取出各项数据。
项目第五步:如果要将爬取到的数据导出为csv文件,需要编写并配置一个Pipeline。必须先在设置文件中进行配置,注意设置语句中有一个“300”。这是指多个管道的优先级。数字越小,优先级越高。然后编写管道函数。基本上scrapy的pipeline功能写的差不多,可以复制重复使用。
项目最后:在命令行输入scrapy crawl aqi_spider执行爬虫,可以打开导出的csv文件,发现是乱码。那是因为csv的编码格式与utf-8不同,所以如果出现中文乱码,只需在弹出的“数据”--“从Text/csv导入”文本框中选择编码为utf即可Excel软件导航-8就可以解决了,到此为止,通过scrapy框架已经弯曲了一个简单的数据爬虫。
愉快充实的学习经历,期待更深入的爬虫之旅~!