python爬虫实例(政府招标采购信息爬取并写入CSV)

实例目标:

在政府招标采购网上,爬取招标信息,并写入CSV文件,形成招标结果信息表格。
政府招标采购网址:
链接: linkhttp://www.ccgp-hubei.gov.cn/notice/cggg/pzhbgg/index_1.html.
页面如下:
在这里插入图片描述每一条项目信息都是一个链接,进入链接后,是项目的完整信息:
在这里插入图片描述最终目标是获取每个项目的具体信息,如项目编号、项目名称、中标金额等,并形成表格。

步骤

1. 爬虫过程中要针对主页和每个项目链接,分别实现html获取,并解析,所以分别将这两块写成函数:

def download_page()
def xml_aly

2. 获取分页信息,设置翻页循环次数

在这里插入图片描述

    page_end=xml_aly(rule=rule_host,url=u_host)
    end_num=re.findall("\d+",page_end[0])   #获取招标首页页码信息 
    page=end_num[1]        
    n=int(page)

3. 创建csv文件,并写入表头

    with open('zb.csv','a',newline='') as f:
        writer = csv.writer(f)
        writer.writerow(['项目编号','项目名称','供应商','项目金额','日期']) #写入表头   

4. 分别爬取每个项目信息,并写入csv

代码

重要环节已在代码中注释

import random
import requests
from lxml import etree
import re
import csv

#获取页面html 
def download_page(url, user_Agent=None, referer=None):
    #应对反爬虫,构建User_Agent池
    ua_list=[
        "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0"
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0",
        ]
    user_Agent=random.choice(ua_list)   
    headers = {
        "Referer":referer,
        "User-Agent":user_Agent
    }
    response = requests.get(url=url,headers=headers)
    try:
        html = response.content.decode("utf-8")           
    except Exception as e:
        print("Download error:",e)
        html = None
    return html

#html解析
def xml_aly(rule,url):
    html=download_page(url)
    tree=etree.HTML(html)
    aly_res=tree.xpath(rule)
    return aly_res


 
if __name__ == '__main__':
           
        u_host = "http://www.ccgp-hubei.gov.cn/notice/cggg/pzhbgg/index_1.html"
        rule_host='//ul[@class="pagination"]/li[last()]/text()'
        page_end=xml_aly(rule=rule_host,url=u_host)
        end_num=re.findall("\d+",page_end[0])   #获取招标首页页码信息 
        page=end_num[1]        
        n=int(page)
        with open('zb.csv','a',newline='') as f:
            writer = csv.writer(f)
            writer.writerow(['项目编号','项目名称','供应商','项目金额','日期']) #写入表头   
            
            #翻页获取所有招标项目链接
            for i in range(n+1):
                u_host = "http://www.ccgp-hubei.gov.cn/notice/cggg/pzhbgg/index_"+str(i)+".html"
                rule_host='//ul[@class="news-list-content list-unstyled margin-top-20"]/li/a/@href'
                project_link=xml_aly(rule=rule_host,url=u_host)

                #爬取每页中所有项目链接的html,并写入csv 
                for link in project_link:
                        url_head="http://www.ccgp-hubei.gov.cn"
                        url=url_head+link
                        rule_project='//p/span/text()'
                        project_content=xml_aly(rule=rule_project,url=url)
                        
                        project_num=project_content[0]
                        project_name=project_content[2]
                        project_sup=project_content[4]
                        project_scale=project_content[8]+"万元"
                        project_date=project_content[12]
                        writer.writerow([project_num,project_name,project_sup,project_scale,project_date])

最终结果:

在这里插入图片描述

  • 22
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,下面是一个简单的示例代码,可以爬取智联招聘网站上的计算机类岗位信息,并将数据写入CSV文件中: ```python import requests import csv from bs4 import BeautifulSoup # 设置请求头部,模拟浏览器访问 headers = { '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'} # 设置请求参数,包括关键字、地区、工作经验等 params = { 'jl': '全国', 'kw': '计算机', 'p': '1', 'isadv': '0', 'isfilter': '1', } # 发送请求,获取响应内容 response = requests.get('https://fe-api.zhaopin.com/c/i/sou', headers=headers, params=params) data = response.json()['data']['results'] # 打开CSV文件,写入表头 with open('job_info.csv', 'w', encoding='utf-8-sig', newline='') as f: writer = csv.writer(f) writer.writerow(['职位名称', '公司名称', '薪资', '工作地点', '工作经验', '学历要求']) # 遍历获取到的数据,写入CSV文件 for item in data: writer.writerow([item['jobName'], item['company']['name'], item['salary'], item['city']['display'], item['workingExp']['name'], item['eduLevel']['name']]) ``` 这个示例代码使用了requests库发送请求,BeautifulSoup库解析HTML页面,csv写入CSV文件。你可以根据自己的需求修改参数和解析方式。同时需要注意的是,该示例只是一个简单的爬虫,需要考虑反爬虫策略、数据去重和清洗等问题,具体实现时需要更加细致和严谨。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值