python爬虫scrapy项目入门(1)

一、用pycharm创建scrapy项目

  1. 创建一个pure python项目
  2. 下载scrapy
    选择file—setting——project Interpreter
    在这里插入图片描述
  3. 创建项目
    选择Terminal窗口,输入命令“scrapy startproject Testscr”这里的Testscr为项目名称

二、项目结构说明

  1. scrapy.cfg是整个项目的配置文件
  2. items.py存储的是所有爬取数据的模型
  3. middlewares.py是中间件
  4. pipelines.py用于处理爬取到的数据

三、创建结构化实体

  1. 修改items.py文件
  2. 添加爬取结果实体
class CityItem(scrapy.Item):
    name=scrapy.Field()    #项目名称
    url=scrapy.Field()     #项目对应URL

四、创建爬虫

cd Testscr  //Testscr是项目文件夹名称
scrapy genspider  hotel bnb.qunar.com
  1. hotel 是爬虫名称
  2. bnb.qunar.com 是爬取的域名
  3. 创建成功后在spiders文件夹中出现hotel.py文件
class HotelSpider(scrapy.Spider):
    name = 'hotel'    #爬虫的名字
    allowed_domains = ['bnb.qunar.com']  #允许的域名
    start_urls = ['https://www.jxsggzy.cn/web/jyxx/002006/jyxx.html'] #开始的url


    def parse(self, response):
        '''
        解析html获取所需数据
        '''
        #爬取下来的html代码
        html=response.text
        soup = bs4.BeautifulSoup(html)  # 通过下载的网页文本创建bs4对象
        elems = soup.select("a[class='ewb-list-name']")  # 进行页面元素筛选
        item=CityItem()
        url = "https://www.jxsggzy.cn"
        for elem in elems:
            item["name"]=elem.getText()
            item["url"]=url+ elem.get("href")
            yield item   #返回信息,存储在结构化实体中

五、修改配置文件

  1. 修改settings.py文件
  2. 添加网页头部信息
DEFAULT_REQUEST_HEADERS = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36',
}

没有添加网页头部信息,爬虫没有效果

六、进行持久性存储

  1. 使用Pipeline处理数据
    当Item在Spider中被收集之后,它将会被传递到Pipeline,一些组件会按照一定的顺序执行对Item的处理。
    Pipeline经常进行一下一些操作:
    • 清理HTML数据
    • 验证爬取的数据(检查item包含某些字段)
    • 查重(并丢弃)
    • 将爬取结果保存到数据库中
  2. 注册Pipeline,修改settings.py文件
ITEM_PIPELINES = {
   'Testscr.pipelines.TestscrPipeline': 300,
}

上面的代码用于注册Pipeline,其中Testscr.pipelines.TestscrPipeline为你要注册的类,右侧的’300’为该Pipeline的优先级,范围1~1000,越小越先执行。
3. 修改pipelines.py中的TestscrPipeline进行存储结果,这里采用JSON存储

class TestscrPipeline:
    def process_item(self, item, spider):
        self.exporter.export_item(item)
        # 返回item
        return item

    # 该方法在spider被开启时被调用。
    def open_spider(self, spider):
        print('start crawling....')
        self.file = open('data.json', 'wb')
        self.exporter = JsonLinesItemExporter(self.file, ensure_ascii=False)

    # 该方法在spider被关闭时被调用。
    def close_spider(self, spider):
        self.file.close()
        print('stop crawling.....')

七、建立运行文件

  1. 创建一个run.py文件
from scrapy import cmdline

cmdline.execute("scrapy crawl hotel".split())

其中hotel为蜘蛛名称

八、URL翻页跟进,爬取更多页内容

   def parse(self, response):
        ……
        for elem in elems:
            item["name"]=elem.getText()
            item["url"]=url+ elem.get("href")
            yield item   #返回信息

        # url翻页跟进
        # 获取下一页的url信息
        elem=soup.select("li[class='nextlink'] a")
        if len(elem)>0:
            page=url+ elem[0].get("href")
            print("下一页地址:"+page)
            yield scrapy.Request(page, callback=self.parse,dont_filter=True)
  1. 下一页链接地址
 elem=soup.select("li[class='nextlink'] a")
 page=url+ elem[0].get("href")
  1. 接着查询
yield scrapy.Request(page, callback=self.parse,dont_filter=True)

注意:下一个参数必须有,否则不执行,他表示重复页面不进行爬取

dont_filter=True
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值