scrapy框架爬取建设行业数据实例(思路整理)

最近挤了点时间,写了个爬虫,可能以后工作中能用得上。关于scrapy框架的一些基础知识这里就不再赘述,这里主要记录下开发思路。

关于项目背景:

http://jst.sc.gov.cn/xxgx/Enterprise/eList.aspx从这个网站中查询建筑企业,并且爬取每个企业的基本信息,资质证书和注册人员信息。

首先分析目标网站,要查询到每个企业的详细信息,需要获取到企业id,先写个爬虫获取企业id并导出到id表格中:

class ElistSpider(scrapy.Spider):
    name = 'eList'
    allowed_domains = ['http://jst.sc.gov.cn/xxgx/Enterprise/eList.aspx']
    f_1Sheet1 = None
    f_1_count = None

    # 设置浏览器用户代理
    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'}

    def start_requests(self):
        # 读取企业名称excel
        f_1 = xlrd.open_workbook(r'企业名称.xlsx')
        self.f_1Sheet1 = f_1.sheet_by_index(0)
        # 表里的数据量(数据行数)
        self.f_1_count = self.f_1Sheet1.nrows
        # 第一次请求页面,设置开启cookie使其得到cookie,设置回调函数
        return [Request('http://jst.sc.gov.cn/xxgx/Enterprise/eList.aspx', meta={'cookiejar': 1}, callback=self.parse)]

    def parse(self, response):
        __VIEWSTATE = response.css('#__VIEWSTATE::attr(value)').extract()[0]
        __VIEWSTATEGENERATOR = response.css(
            '#__VIEWSTATEGENERATOR::attr(value)').extract()[0]
        __EVENTVALIDATION = response.css(
            '#__EVENTVALIDATION::attr(value)').extract()[0]
        # print(__VIEWSTATE)
        # print(__VIEWSTATEGENERATOR)
        # print(__EVENTVALIDATION)
        # 设置提交表单信息,对应抓包得到字段
        for i in range(1, self.f_1_count):
            rows = self.f_1Sheet1.row_values(i)  # 获取行内容
            form_data = {
                '__VIEWSTATE': __VIEWSTATE,
                '__VIEWSTATEGENERATOR': __VIEWSTATEGENERATOR,
                '__EVENTVALIDATION': __EVENTVALIDATION,
                'qylx': '',
                'mc': str(rows[0]),
                'xydm': '',
                'fr': '',
                'zsbh': '',
                'ctl00$MainContent$Button1': '搜索'
            }
            # 第二次用表单post请求,携带Cookie、浏览器代理等信息给Cookie授权
            yield FormRequest(response.url, meta={'cookiejar': response.meta['cookiejar']}, headers=self.header, formdata=form_data, callback=self.next, dont_filter=True)

    def next(self, response):
        items = ElistItem()
        name_id = response.css('.search-result tr td a::attr(href)')
        if name_id:
            items['name_id'] = name_id.extract()[0]
            yield items

从企业名单表中读取企业名称,事先抓包一下请求地址和字段,模拟表单提交,爬取企业id。需要注意的是,网站是用asp.net框架开发的,表单提交的一些字段需要从页面获取:

有了企业id,就可以为所欲为了~接下来写个爬虫,爬取企业的基本信息:

class EzsxxSpider(scrapy.Spider):
    name = 'eZsxx'
    f_1Sheet1 = None
    f_1_count = None
    url = []

    # 设置浏览器用户代理
    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'}

    def start_requests(self):
        # 读取企业id
  
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值