如何快速的使用scrapy

了解了scrapy的基本架构之后,会发现,没有实战好像并不是懂它的原理,想要写一个爬虫尚且还是有点问题。

下面介绍一下它的基本写法,在settings.py中设置配置文件,在里面主要写的是并发数,和延迟下载,以及请求头部的信息

起到了全局调用的效果。


middlewares中间件,这里面的代码可以删除,设置代理ip和随机的请求头,因为爬虫每次访问网站之前都会路过这个类,经过筛选好的ip就可以实现功能了。在下载器中间件里面有个方法为process_request(self,request,spider),这个方法中的代码会排队等待访问网页,在scrapy见到request应该要想到排队,看到item容器要想到pipelines管道文件。


最重要的就是spiders,那么这里面应该怎样写呢,我认为,不应拘束自己的思维,按照自己的想法写,有yield就是生成器,我们可以对他进行调用,最近写的时候我也感觉有些迷茫

import scrapy
import re
from first.items import FirstItem
import ssl

class MeishiSpider(scrapy.Spider):
    name = 'meishi'
    allowed_domains = ['meituan.com']
    start_urls = ['http://meituan.com/']

    def start_requests(self):
        pages =[]
        for i in range(1,3):
            print(i)
            url = "https://xt.meituan.com/meishi/pn"+str(i)+"/"
            # page = scrapy.Request(url)
            pages.append(url)
        for url in pages:
            yield scrapy.Request(url=url,callback=self.parse_index)


    def parse_index(self, response):
        data = response.text

        pat = '"poiId":(.*?),"frontImg"'
        pat1 = '{"itemId":"(.*?)","title"'
        poid = re.findall(pat,data)
        itemId = re.findall(pat1,data)
        if len(poid) != 0:
            Id = poid
        Id = itemId
        print(Id)
        for i in range(len(Id)):
            pageurl = "https://www.meituan.com/meishi/"+str(Id[i])+"/"
            yield scrapy.Request(url=pageurl,callback=self.parse_detail)

    def parse_detail(self,response):
        item = FirstItem()
        data = response.text
        pat2 = '"phone":"(.*?)","openTime'
        pat3 = '"name":"(.*?)","avgScore"'
        pat4 = '"address":"(.*?)","phone":'

        phone = re.findall(pat2, data)
        name = re.findall(pat3, data)
        address = re.findall(pat4, data)

        item['name'] = name
        item['phone'] = phone
        item['address'] = address
        yield item

当我使用芝麻代理来访问这个的时候就会出现一些问题,好像是因为parse这个方法。

 

day2   2019 9/8  整理的好乱,但是还是要坚持写,加油!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值