python爬虫 request+lxml爬取黄页88网企业信息

黄页88网: 简称黄页网或者黄页88,是由互联网资深人士创办于2009年11月。是一家整合企业黄页、分类信息以及时下流行的SNS社区三方面优势于一体定位于服务B2B平台的网站。主要帮助企业宣传推广公司品牌和产品,黄页88网精细划分了82个大行业分类,并且在每个大的分类下又进行了二级和三级行业细分,更加方便网友对所关注信息的查询和浏览,同时对企业发布的信息进行了整合分类更加方便企业对信息的管理和搜索引擎的收录。

官网: http://www.huangye88.com/
贵州IT企业: http://b2b.huangye88.com/guizhou/it/

时间: 2019/08/10

爬取内容: 公司名称,公司详情,联系电话,地点,主营产品。

操作环境: win10, python3.6, jupyter notebook,谷歌浏览器

技术难点:

  • 该网页的数据不是每一个信息都全面,有很多缺少的内容,企业的信息中经常缺失电话,地址,介绍,主营产品四个信息。
  • 唯一不会缺的是企业的名称,但是其中广告的起始标签和企业的一样,而且三个企业就有一条广告,很容易误爬。
  • 信息缺少的地方,标签也会缺少

1、请求网页源码

import requests
from lxml import etree
url = 'http://b2b.huangye88.com/guizhou/it/'
headers={
   
   
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
res = requests.get(url,headers=headers)
res.encoding = 'utf-8'
html = etree.HTML(res.text)

2、分析网页

对于这个网页,不建议使用BeautifulSoup,因为广告和企业信息都在dl标签内,不方便定位节点。也不建议使用正则表达式,因为很多信息不全,标签的位置也不一样。
在这里插入图片描述

3、提取信息

3.1、先定位企业信息所在的节点,右键Copy Xpath,在其中进行循环查找数据;
for et in html.xpath('//*[@id="jubao"]/dl')
3.2、每个企业一定有的信息是企业名称和详情链接,都在<h4> </h4>标签中,容易区分广告,可以用它来判断其他的信息;
    for et in html.xpath('//*[@id="jubao"]/dl'):
        k = k + 1
        name = et.xpath('./dt/h4/a/@title')#输出数组型
        href 
### 使用 PythonRequests 和 lxml爬取电影详情数据 #### 安装所需库 为了使用 `requests` 和 `lxml` 进行络请求和HTML解析,需先安装这两个库。可以通过 pip 工具完成安装: ```bash pip install requests pip install lxml ``` #### 导入必要的包 编写脚本时要导入所需的Python模块,以便后续操作能够顺利执行。 ```python import requests from lxml import etree ``` #### 发送HTTP请求获取页面内容 构建一个函数用于发送GET请求至目标址,并返回响应体的内容字符串形式。 ```python def fetch_page(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', } response = requests.get(url, headers=headers) if response.status_code == 200: return response.text else: raise Exception(f"Failed to load page {url}") ``` #### 解析 HTML 文档结构 利用 `etree.HTML()` 方法将获取到的HTML源码转换成可以被XPath查询的对象;接着定义提取具体字段的方法,比如电影名称、评分等信息。 ```python def parse_html(html_content): html_tree = etree.HTML(html_content) movie_items = [] titles = html_tree.xpath('//div[@class="hd"]/a/span[1]/text()') # 获取电影名列表 ratings = html_tree.xpath('//span[@class="rating_num"]/@property') # 获取评分属性值 for i in range(len(titles)): item = {} item['title'] = titles[i].strip() try: item['rating'] = float(ratings[i]) except IndexError: item['rating'] = None movie_items.append(item) return movie_items ``` 以上代码片段展示了如何通过 XPath 表达式定位DOM节点并读取其文本或属性值[^2]。 #### 处理异常情况 考虑到实际应用环境中可能出现的各种意外状况,在程序设计阶段就应该充分考虑错误处理机制,确保即使遇到问题也能优雅降级而不是直接崩溃退出。 #### 存储抓取的数据 最后一步就是把收集好的资料按照一定格式保存下来,这里可以选择将其写入 CSV 文件方便日后查看或者进一步加工分析。 ```python import csv def save_to_csv(data_list, filename='movies.csv'): with open(filename, mode='w', newline='', encoding='utf-8-sig') as f: writer = csv.DictWriter(f, fieldnames=['title', 'rating']) writer.writeheader() writer.writerows(data_list) ``` 上述过程涵盖了从准备环境到最后结果输出整个流程的关键环节说明[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值