Hangxunbao 网站数据抓取工具
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 网站数据的功能。主要步骤如下:
- 初始化浏览器:使用
webdriver.Chrome()初始化 Chrome 浏览器对象。 - 获取页面源代码:使用
browser.get()方法访问目标网页,并使用browser.page_source获取页面源代码。 - 解析页面源代码:使用
etree.HTML()解析页面源代码,并通过 XPath 获取所需数据。 - 点击下一页:使用
find_element_by_xpath()方法定位下一页按钮,并使用click()方法点击。 - 重复步骤 2-4:直到到达最后一页。
- 关闭浏览器:使用
browser.quit()关闭浏览器。 该代码能够实现自动翻页,并提取每个页面第一个招标信息的标题、招标公司、联系电话等信息。用户可以根据需要修改 XPath 表达式,提取其他所需信息。
注意: 该代码使用 Selenium 自动化操作,可能会被网站检测到,建议使用代理服务器进行访问。此外,请遵守网站使用规则,不要过度抓取数据,以免造成网站负担。
原文地址: https://www.cveoy.top/t/topic/oRyz 著作权归作者所有。请勿转载和采集!