Scrapy新手入门

本文章只为学习使用,只为学习使用,只为学习使用,不为其它用途。欢迎各路大神给出指点意见🌹🌹🌹

Step1:创建Scrapy工程

scrapy startproject xxx
cd xxx
scrapy genspider xx xx.com

Step2:明确对象

在item.py里,按照需求定义需要存储的对象

class StandardItem(scrapy.Item):
    # define the fields for your item here like:
    title = scrapy.Field()  # 名称

    index = scrapy.Field()  # 索引号
    classification = scrapy.Field()  # 分类
    ....

Step3:修改配置文件

一些基操,按需修改就好(或者有没有大神给小白我一点建议)
ROBOTSTXT_OBEY = False
DEFAULT_REQUEST_HEADERS = {
‘Accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8’,
‘Accept-Language’: ‘en’,
}

DOWNLOADER_MIDDLEWARES = {
‘Standard.middlewares.SeleniumMiddle’: None,
}
(写了一个中间件 但后面发现直接请求接口获取动态数据也可以)
ITEM_PIPELINES = {
‘Standard.pipelines.StandardPipeline’: 300,
}
(一定记得把管道放开哈)
AUTOTHROTTLE_START_DELAY = 5
AUTOTHROTTLE_MAX_DELAY = 60
AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0

Step4:编写Spider

大概思路如下:

Created with Raphaël 2.3.0 开始 获取动态数据接口 获取详情URL 获取文章的分类信息 存储 End
class xxxSpider(scrapy.Spider):
    name = 'xx'
    allowed_domains = ['xx.xxx.xxxx.cn']
    start_urls = ['......']

    def __init__(self):
        option = webdriver.ChromeOptions()
        option.add_experimental_option('excludeSwitches', ['enable-automation'])
        option.add_argument('--disable-blink-features=AutomationControlled')
        self.driver = webdriver.Chrome('/Users/...../chromedriver', options=option)
        self.url_list = []

    def parse(self, response):
        startUrls = ["........."]
        self.driver.get(startUrls[0])
        sleep(2)
        pages = self.driver.find_elements(By.XPATH, '//div[@class="table-content-wrap"]/div[@class="pagination"]/a')
        pages = pages[-3].text
        page_num = (int(pages) // 5) + 1
        for i in range(1, page_num + 1):
            url = f'http://........?page={i}'
            yield scrapy.Request(url=url, callback=self.get_data)

    def get_data(self, response):
        datas = json.loads(response.text)
        items = datas.get('articles')
        for each in items:
            item = StandardItem()
            url = each.get('url')
            item['url'] = url
            yield scrapy.Request(url=url, callback=self.get_datas,meta={'item':item})
    def get_datas(self, response):
        item = response.meta['item']
        item['title'] = re.findall('<h1 class="title document-number">(.*?)</h1>', response.text, re.S)[0]
        item['index'] = re.findall(
            '<td class="first">\s+索引号:\s+</td>\s+<td class="td-value-xl">\s+<span title=".*?">(.*?)</span>\s+</td>',
            response.text, re.S)[0]
        try:
            item['classification'] = re.findall('<td class="second">\s+分类:\s+</td>\s+<td class="td-value">\s+<span>(.*?)</span>\s+</td>',response.text,re.S)[0]
        except:
            item['classification'] = ''
            .........

Step5:保存数据

在pipelines.py里写下你的存储方式就ok啦(最后是266条数据)
在这里插入图片描述
网页数据也是266✅
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值