你想批评指点四周风景,你首先要爬上屋顶。

0%

Scrapy 爬虫实战

  最近在看爬虫,跟着Scrapy的官方文档实例走了一遍,等自己想爬别的网站的时候,发现还是有点问题,于是网上找了个教程,自己跟着做了一遍,然后换了一个网站,爬一下别的数据,现在做一下记录,由于也是刚刚接触,所以在一些使用上可能还存在误区,欢迎大家批评指正。
  http://www.weather.com.cn/weather/101250101.shtml
  这是我们爬取信息的网址,爬取长沙未来七天的天气情况。

  环境:windows10,python3.6,scrapy1.8,anaconda,chorme

创建scrapy项目并生成相应的文件

  首先选择一个你的项目位置,然后在该位置下打开cmd,执行 scrapy start testSpider ,初始化一个scrapy项目,其中最后一个字段是项目名称,效果如下:

  在PyCharm中可以查看一下目录结构:

  这些文件的主要作用在官方文档里都有介绍。
  然后我们回到cmd,根据提示进行操作,cd testSpider 切换到项目的文件夹下,执行 scrapy genspider example example.com,这里example是你的爬虫的name,是他的唯一标示,不同的爬虫的name必须不同,example.com是允许爬取的域。
  我们执行 scrapy genspider weather weather.com.cn 创建一个爬虫的执行文件。执行完之后可以PyCharm中看到在spiders的文件夹下生成了一个weather.py文件:

  文件包含一些自动生成的代码。

分析需要爬取的网页并编码

  我们打开那个网址,ctrl+shift+i,检查,一步一步找到我们需要的信息,最终发现,这些天气的信息都在一个如图所示的位置。

  找到这个位置之后,我们点开一天的,信息如下图所示,因为我是在晚上写的这篇博客,看的又是第一天,所以只有最低温度,没有最高温度,我们提取 天,天气,最低温和最高温这4项信息。

  这时候,我们需要打开项目中的items.py,写一个类来保存(封装)我们的这些数据,如下图所示。

  下面需要我们的爬虫登场了,打开spider下的weather.py,我们下面使用BeautifulSoup来进行数据的提取。我直接贴上代码喽。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import scrapy
from bs4 import BeautifulSoup
from weatherSpider.items import WeatherItem

class WeahterSpider(scrapy.Spider):
name = 'weather' #spider的名字,唯一标志
allowed_domains = ['weather.com.cn'] #允许爬取的域
start_urls = ['http://www.weather.com.cn/weather/101250101.shtml'] #开始爬取的起点

def parse(self,response):
html = response.text #获得爬到的网页的HTML代码

soup = BeautifulSoup(html,'lxml') #创建一个soup对象
weather = WeatherItem() #创建一个weatherItem对象,存储爬取的信息
div_7d = soup.find('div',class_='c7d') #找到class为c7d的标签
if div_7d is not None: #如果存在
ul = div_7d.find('ul') #逐步缩小范围
if ul is not None:
for li in ul.find_all('li'):
if li is not None:
weather['day'] = li.find('h1').get_text() #取标签包含的数据
weather['wea'] = li.find('p').get_text()
span = li.find('span')
if span is not None:
weather['highest'] = span.get_text()
weather['lowest'] = li.find('i').get_text()
print(weather)

  整体的思想就是一步一步缩小范围,逐步获得我们需要的数据。

entryPoint.py 便捷启动

  编写完上面的代码,在scrapy项目的根目录下执行 scrapy crawl weather 就能为了能够运行爬虫程序了,但是为了更加方便的启动爬虫,我们可以在项目根目录下编写一个entrypoint.py文件,直接在PyCharm中启动爬虫,

1
2
3
from scrapy.cmdline import execute

execute(['scrapy','crawl','weather'])

  执行之后就能够看到爬取的数据的结果了:

  到这,这个简单的scrapy爬虫实战就结束了….确实很简单,但也会有成就感。

补充

  最后补充一点,菜鸡用markdown的时候,#后面忘记加空格,导致标题显示不出来,嘿嘿嘿,抽自己一下。

----------------------------本文已结束,感谢阅读。----------------------------