import time
from selenium import webdriver
from lxml import etree

class jiaoben(object):

    def __init__(self):
        self.start_url = 'https://www.hangxunbao.com/s?search_type=title&limit=20&status=all&page=1'
        self.detail_url = 'https://www.hangxunbao.com/bid/{}
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.51'
        }

    def get_data(self, url):
        self.browser.get(url)
        time.sleep(1)
        return self.browser.page_source

    def parse_data(self, data):
        # 创建element对象
        html = etree.HTML(data)
        temp = html.xpath('//*[@id='bidList']/ul/li[1]/div[1]/div[1]/a')
        if len(temp) == 0:
            return False
        else:
            detail_id = temp[0].get('href').split('/')[-1]
            detail_url = self.detail_url.format(detail_id)
            detail_data = self.get_data(detail_url)
            detail_html = etree.HTML(detail_data)

            temp1 = {}
            temp1['title'] = detail_html.xpath('//*[@id='bidDetail']/div[2]/div[1]/ul/li/div[1]/a/h1')[0].text
            temp1['invite_tenders_company'] = detail_html.xpath('./li[1]/div[2]/span[1]')[0].text
            temp1['invite_tenders_tel'] = detail_html.xpath('./li[1]/div[2]/span[2]')[0].text
            temp1['agent_company'] = detail_html.xpath('./li[2]/div[2]/span[1]')[0].text
            temp1['agent_tel'] = detail_html.xpath('./li[2]/div[2]/span[2]')[0].text

            print(temp1)

    def run(self):
        # 初始化浏览器
        self.browser = webdriver.Chrome()
        # 发送请求,获取响应
        data = self.get_data(self.start_url)
        # 从响应中提取数据
        while data:
            self.parse_data(data)
            # 点击翻页
            next_page = self.browser.find_element_by_xpath('//*[@id='bidList']/div[3]/a[last()]')
            if next_page.text == '下一页':
                next_page.click()
                time.sleep(1)
                data = self.browser.page_source
            else:
                break
        # 关闭浏览器
        self.browser.quit()

if __name__ == '__main__':
    jiaoben = jiaoben()
    jiaoben.run()

该代码利用 Selenium 模拟浏览器行为,实现自动化抓取 Hangxunbao 网站数据的功能。主要步骤如下:

  1. 初始化浏览器:使用 webdriver.Chrome() 初始化 Chrome 浏览器对象。
  2. 获取页面源代码:使用 browser.get() 方法访问目标网页,并使用 browser.page_source 获取页面源代码。
  3. 解析页面源代码:使用 etree.HTML() 解析页面源代码,并通过 XPath 获取所需数据。
  4. 点击下一页:使用 find_element_by_xpath() 方法定位下一页按钮,并使用 click() 方法点击。
  5. 重复步骤 2-4:直到到达最后一页。
  6. 关闭浏览器:使用 browser.quit() 关闭浏览器。 该代码能够实现自动翻页,并提取每个页面第一个招标信息的标题、招标公司、联系电话等信息。用户可以根据需要修改 XPath 表达式,提取其他所需信息。

注意: 该代码使用 Selenium 自动化操作,可能会被网站检测到,建议使用代理服务器进行访问。此外,请遵守网站使用规则,不要过度抓取数据,以免造成网站负担。

Hangxunbao 网站数据抓取工具

原文地址: https://www.cveoy.top/t/topic/oRyz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录