搭建scrapy框架

第一步,本地创建文件并下载。(注意pip改国内的,不会自行百度,我没时间)
在这里插入图片描述
第二步,测试是否下载成功
在这里插入图片描述
第三步,检测正确性
在这里插入图片描述

出现这样的,说名没问题。
在这里插入图片描述
第四步,通过指令创建文件

scrapy startproject qd_english #qd_english是文件名

创建成功
在这里插入图片描述
第五步,关闭爬虫协议
在这里插入图片描述
第六步,
在这里插入图片描述
创建爬取

scrapy genspider english chinadaily.com.cn
练习网站 http://language.chinadaily.com.cn/thelatest

其中 chinadaily.com.cn是网站域名,english是文件名
在这里插入图片描述
第七步,修改内部参数

import scrapy


class EnglishSpider(scrapy.Spider):
    name = 'english'
    allowed_domains = ['chinadaily.com.cn'] #域名
    start_urls = ['http://language.chinadaily.com.cn/thelatest'] #修改成需要爬取的url

    def parse(self, response):
        print(response.text)

启动

scrapy crawl english

在这里插入图片描述
获取源码成功
在这里插入图片描述
第八步,使用xpath提取标签

  def parse(self, response):
        divs=response.xpath("")
        for div in divs:
            title=div.xpath("").get()
            title1 = div.xpath("").get()
            title2 = div.xpath("").get()
            title3= div.xpath("").get()
            title4 = div.xpath("").get()
    def parse(self, response):
        divs=response.xpath("//div[@class='content_left']/div[@class='gy_box']")
        for div in divs:
            title=div.xpath(".//div[@class='content_left']//div[@class='gy_box_txt']/p[1]/text()").get()
            title1 = div.xpath(".//div[@class='gy_box_txt']/p[2]/text()").get()
            title2 = div.xpath(".//div[@class='gy_box_txt']/p/a/@href").get()
            title3= div.xpath(".//div[@class='content_left']//div[@class='gy_box']/a/img/@src").get()

完成后,转到item文件
在这里插入图片描述
在这里插入图片描述
导入数据

import scrapy
from ..items import QdEnglishItem
class EnglishSpider(scrapy.Spider):
    name = 'english'
    allowed_domains = ['chinadaily.com.cn'] #域名
    start_urls = ['http://language.chinadaily.com.cn/thelatest'] #修改成需要爬取的url
    def parse(self, response):
        divs=response.xpath("//div[@class='content_left']/div[@class='gy_box']")
        for div in divs:
            title=div.xpath(".//div[@class='content_left']//div[@class='gy_box_txt']/p[1]/text()").get()
            title1 = div.xpath(".//div[@class='gy_box_txt']/p[2]/text()").get()
            title2 = div.xpath(".//div[@class='gy_box_txt']/p/a/@href").get()
            title3= div.xpath(".//div[@class='content_left']//div[@class='gy_box']/a/img/@src").get()

            itme =  QdEnglishItem(title=title,title1=title1,title2=title2,title3=title3)
            yield itme


在这里插入图片描述
传入爬取参数
在这里插入图片描述

第九步,保存数据,前面步骤都完成才可。
在这里插入图片描述
保存格式,这里涉及到了python面向对象的知识,看不懂可以先补补面向对象,也可以套用,改几个名字就行。

import csv
from itemadapter import ItemAdapter


class QdEnglishPipeline:
    def __init__(self):
        self.f = open('data.csv',mode='a',encoding="utf-8",newline='')
        self.csv_write=csv.DictWriter(self.f,fieldnames=['title','title1','title2','title3'])
        self.csv_write.writeheader()

    def process_item(self,item,spider):
        self.csv_write.writerow(dict(item))
        return item

    def close_file(self):
        self.f.close()

打开保存配置
在这里插入图片描述
第十步,运行。scrapy是一个框架,所以只能在整体请求之后,报错才能修改,无法局部执行。

scrapy crawl english

在这里插入图片描述
哈哈哈,崩。
在这里插入图片描述
定位错误,让我瞅瞅。

   for div in divs:
            title=div.xpath(".//div[@class='gy_box_txt']/p[1]/a/text()").get()
            title1 = div.xpath(".//div[@class='gy_box_txt']/p[2]/a/text()").get()
            title2 = div.xpath(".//div[@class='gy_box_txt']/p[1]/a/@href").get()
            title3 = div.xpath(".//a/img/@src").get()

成果
在这里插入图片描述

第十一步,翻页提取,利用格式化翻页。
在这里插入图片描述

 start_urls = ['http://language.chinadaily.com.cn/thelatest/page_{}.html'.format(i) for i in range(1,50)]

如果求情失败,可能是没有添加headers头.
settings里面开启DEFAULT_REQUEST_HEADERS,根据需求设置相关内容即可,主要就是配置"User-Agent"。

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; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
}

管道持续保存


    def open_spider(self,spider):
        print("开始数据爬取")
        self.fp = open('./yangougou.txt','w',encoding='utf-8')
    def process_item(self,item,spider):
        tit=item['tit']
        self.fp.write(tit)
        return item
    def close_spider(self,spider):
        print("数据抓取结束")
        self.fp.close()

最后。求一波关注。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风启新尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值