Python 利用爬虫爬取网页内容 (div节点的疑惑)

Python爬虫解析HTML获取div节点内容
本文讲述了在Python中使用BeautifulSoup爬取网页内容时遇到的div节点解析问题。作者分享了如何正确选择class_属性,以及在处理字符串时正则表达式的应用,以提取评分数据并展示运行结果。

Python 利用爬虫爬取网页内容 (div节点的疑惑)
最近在写爬虫的时候发现利用beautifulsoup解析网页html

利用解析结果片段为:

死侍2 / DP2

2018-05-18(美国) / 瑞恩·雷诺兹 / 乔什·布洛林 / 莫蕾娜·巴卡林 / 朱利安·迪尼森 / 莎姬·贝兹 / T·J·米勒 / 莱斯利·格塞斯 / 卡兰·索尼 / 布里安娜·希德布兰德 / 杰克·凯西 / 埃迪·马森 / 忽那汐里 / 斯蒂芬·卡皮契奇 / 兰德尔·瑞德...

7.5 (94247人评价)

我要抓取的是评分,也就是上文中:7.5

利用find_all('节点‘,class_=‘目标class’)

在之前抓取的时候,经常将“”这个符号也写入目标class中,并且认为要加入转义符号r‘’以去消除转义

但经常返回的是空字符串

之后看到了其他博客后发现,不用加入“”也可以(若是加入“”后应该注意r’'的使用)

源代码为:

复制代码
import re
import requests
from bs4 import BeautifulSoup

def get_HTML(url):
header = {“User-Agent”: “Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like

### 如何用 Python 爬虫抓取豆瓣网页内容 #### 使用 Requests 和 BeautifulSoup 进行数据采集 为了实现从豆瓣网站上抓取数据的任务,可以利用 `requests` 库发送 HTTP 请求并获取目标页面的内容,再借助 `BeautifulSoup` 解析 HTML 文档提取所需的信息。以下是具体方法: 1. **安装必要的库** 需要先确保已安装所需的第三方库 `requests` 和 `bs4`(即 BeautifulSoup)。可以通过以下命令安装这些依赖项[^3]: ```bash pip install requests bs4 ``` 2. **发送 HTTP 请求** 利用 `requests.get()` 方法向目标 URL 发起 GET 请求以获取响应对象。随后调用 `.text` 属性读取返回的 HTML 页面源码。 ```python import requests url = 'https://movie.douban.com/top250' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'} response = requests.get(url, headers=headers) html_content = response.text ``` 3. **解析 HTML 并提取数据** 创建一个 `BeautifulSoup` 对象传入上述获得的 HTML 字符串以及指定解析器类型(推荐 lxml),之后便可按照标签名称或者 CSS 选择器定位到特定节点进而抽取其内部文字或其他属性值。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'lxml') movie_list = [] for item in soup.select('.item'): title = item.find('span', class_='title').get_text() rating_num = float(item.find('span', class_='rating_num').get_text()) movie_info = { 'Title': title, 'Rating': rating_num } movie_list.append(movie_info) ``` 4. **应对反爬机制** 当前许多主流站点都会采取一定措施防止被恶意爬取,比如设置访问频率限制、验证身份合法性等等。针对这种情况,在构建请求头时加入模拟浏览器行为的相关字段是非常重要的一步;另外还可以考虑引入代理 IP 或者延时操作等方式降低触发防护策略的风险。 #### 示例代码总结 下面给出完整的示例脚本供参考: ```python import time from random import randint import requests from bs4 import BeautifulSoup def fetch_douban_movies(): base_url = 'https://movie.douban.com/top250?start=' all_movies = [] user_agent = ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3)' 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome') custom_headers = {"User-Agent": user_agent} start_index = 0 while True: current_page_url = f"{base_url}{start_index}" resp = requests.get(current_page_url, headers=custom_headers) if not resp.ok or '<div id="content">' not in resp.text: break parsed_html = BeautifulSoup(resp.content.decode(), features="html.parser") items = parsed_html.findAll("div", attrs={"class":"hd"}) titles_and_links = [(i.a.span.string.strip(), i.parent['href']) for i in items] all_movies.extend(titles_and_links) sleep_time = randint(1, 3) print(f"Sleeping {sleep_time} seconds before next request...") time.sleep(sleep_time) start_index += 25 return all_movies if __name__ == "__main__": movies_data = fetch_douban_movies() with open('./douban_top250.txt', mode='w+', encoding='utf8') as file_handler: for idx, record in enumerate(movies_data): rank = str(idx + 1).zfill(len(str(len(movies_data)))) line_to_write = "{}\t{}\n".format(rank, "\t".join(record)) file_handler.write(line_to_write) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值