scrapy爬取阳光政务投诉

先说好,本博客都是自己练手的,没有任何商业化什么的,如果要求删除请私聊,看到后会第一时间删掉,不要发律师函,谢谢,鸡你太美

yg.py

# -*- coding: utf-8 -*-
import scrapy
from yangguang.items import YangguangItem	#item文件里定义了几个参数,下面放items.py

class YgSpider(scrapy.Spider):
    name = 'yg'						#爬虫名字
    allowed_domains = ['sun0769.com']			#限制url
    start_urls = ['http://wz.sun0769.com/index.php/question/questionType?type=4&page=0']			#初始url

    def parse(self, response):
        tr_list = response.xpath('//div[@class="greyframe"]/table[2]//tr//tr')
        for tr in tr_list:
            item = YangguangItem()			#实例化
            item["title"] = tr.xpath('./td[2]/a[2]/@title').extract_first()
            item["href"] = tr.xpath('./td[2]/a[2]/@href').extract_first()
            item["publish_data"] = tr.xpath("./td[5]/text()").extract_first()

            yield scrapy.Request(					#request对象,将item["href"]和meta字典传递给parse_href中
                item["href"],
                callback = self.parse_href,		#callback是定义下一个将要使用的方法
                meta = {"item":item}				#meta必须为字典,作用是传递数据给下一个需要调用的地方
            )

        # next_url,获取详情页的具体信息
        next_url = response.xpath('//a[text()='>']/@href').extract_first()		#获取下一页的链接
        if next_url is not None:
            yield scrapy.Request(				#next_url传递到parse中
                next_url,
                callback=self.parse
            )


    def parse_href(self,response):	
        item = response.meta["item"]			#接受meta中数据
        item["content"] = response.xpath('//td[@class="txt16_3"]//text()').extract()
        item["content_img"] = response.xpath('//td[@class="txt16_3"]//img/@src').extract()
        item["content_img"] = ['http://wz.sun0769.com' + i for i in item["content_img"]]
        yield item

items.py

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy


class YangguangItem(scrapy.Item):
    title = scrapy.Field()
    href = scrapy.Field()
    publish_data = scrapy.Field()
    content_img = scrapy.Field()
    content = scrapy.Field()
    _id = scrapy.Field()

pipelines.py

import  re

class YangguangPipeline(object):
    def process_item(self, item, spider):
        item["content"] = self.process_content(item["content"])		#处理一下content中的数据格式
        return item

    def process_content(self,content):
        content = [re.sub(r"\r\n|\xa0|\t|\s*","",i) for i in content]		#把\r\n|\xa0|\t|\s*替换成‘’
        while '' in content:
            content.remove('')												#删掉‘’
        content = ''.join(content)							#拼接内容
        return content
Scrapy 是一个强大的 Python 网络爬虫框架,它能够方便地抓取网站数据并支持复杂的爬取逻辑。要使用 Scrapy 爬取百度(或者其他网站),你需要按照以下步骤进行: 1. **安装 Scrapy**: 首先确保你已经安装了 `pip`,然后运行命令安装 Scrapy 和其依赖项: ``` pip install scrapy ``` 2. **创建一个新的 Scrapy 项目**: 运行 `scrapy startproject my_baidu_crawler` 创建一个名为 `my_baidu_crawler` 的新项目。 3. **定义 Spider**: 在项目中的 `spiders` 文件夹下创建一个名为 `baidu_spider.py` 的文件,编写蜘蛛类。例如,你可以定义爬取首页的方法(`start_requests()`)和解析网页的方法(`parse()`): ```python import scrapy class BaiduSpider(scrapy.Spider): name = "baiduspider" allowed_domains = ["baidu.com"] start_urls = ["https://www.baidu.com"] def parse(self, response): # 解析页面元素,获取需要的数据 title = response.css('title::text').get() links = response.css('a::attr(href)').getall() yield { 'title': title, 'links': links, } # 搜索下一页链接,如果存在则继续爬取 next_page = response.css('li.next a::attr(href)').get() if next_page is not None: yield response.follow(next_page, self.parse) ``` 4. **配置 settings.py**: 在项目根目录的 `settings.py` 文件中,添加以下配置以启用请求中间件等设置: ```python USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' ROBOTSTXT_OBEY = True ``` 5. **运行爬虫**: 在终端或命令行中进入项目目录,然后运行 `scrapy crawl baiduspider` 来启动爬虫。 6. **处理爬取结果**: Scrapy 会将爬取的数据存储到数据库(默认为 SQLite)或 CSV 文件中,根据你的需求选择合适的输出格式。 **相关问题**: 1. 如何处理 Scrapy 中的反爬策略? 2. Scrapy 的 Item Pipeline 在爬虫中的作用是什么? 3. 如何处理 Scrapy 爬虫中的重定向? 4. 怎么在 Scrapy 中使用代理服务器?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值