下面是 Python 实现从 Web 抓取文档的方法的完整攻略:
请求库是 Python 抓取 Web 数据的重要工具,常见的有 requests、urllib 等。在本攻略中我们以 requests 为例,首先需要安装 requests。
安装 requests 的方法有很多,在命令行中可以使用 pip 工具安装:
pip install requests
我们可以使用 requests.get() 方法来发起一个 GET 请求,获取响应的 HTML 数据。比如,想要抓取网站 https://www.python.org/ 的 HTML 数据,可以使用以下代码:
import requests
url = "https://www.python.org/"
response = requests.get(url)
print(response.text)
上述代码会发起一个 GET 请求,并将响应的 HTML 数据打印到控制台上。
得到 HTML 数据之后,我们需要使用解析库将其解析成具有结构的数据,以方便我们进一步处理和分析。常见的解析库有 BeautifulSoup、lxml 等,我们以 BeautifulSoup 为例。
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, "html.parser")
# 获取网页标题
title = soup.title.string
# 获取网页所有链接
links = [link.get("href") for link in soup.find_all("a")]
print(title)
print(links)
上述代码使用 BeautifulSoup 将 HTML 数据解析成 BeautifulSoup 对象,可以通过 soup 对象获取网页标题和所有链接。
现在,我们来看一个实战示例,如何使用 Python 抓取豆瓣电影 Top250 的排名数据。
豆瓣电影 Top250 的排名数据页面为 https://movie.douban.com/top250,我们主要使用 requests 和 BeautifulSoup 两个库来实现。
import requests
from bs4 import BeautifulSoup
url = "https://movie.douban.com/top250"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
movie_list = soup.find_all("div", class_="info")
for index, movie in enumerate(movie_list):
title = movie.find("span", class_="title").string
rating = movie.find("span", class_="rating_num").string
print("{}. {} - {}".format(index+1, title, rating))
上述代码首先发起请求,然后使用 BeautifulSoup 解析 HTML 数据,获取每部电影的标题和评分,最后打印排名结果。
我们还可以使用 Python 抓取微信公众号的历史文章列表数据,以做数据分析或者二次开发。比如,我们想要获取某公众号历史文章列表数据,可以使用以下代码:
import requests
import re
from bs4 import BeautifulSoup
url = "https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MjM5MDMzNjAzMQ==&scene=124&#wechat_redirect"
cookies = {
# 在浏览器登录微信公众号后,获取到以下 Cookies 值
"devicetype": "Windows 7",
"version": "62060201",
"lang": "zh_CN",
"pass_ticket": "xxxxxxxx",
"wap_sid2": "xxxxxxxx",
"reward_uin": "xxxxxx",
"pgv_pvid": "xxxxxxxxxx",
"tvfe_boss_uuid": "xxxxxxxxxxxxxxxx",
"ua_id": "xxxxxxxxxxxxx"
}
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.36 Edge/16.16299"
}
response = requests.get(url, cookies=cookies, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
articles = []
for article in soup.find_all("h4", class_="weui_media_title"):
title = article.string
link = article.parent.get("hrefs")
articles.append((title, link))
print(articles)
上述代码通过模拟浏览器的 Cookies 和 User-Agent 信息,来登陆微信公众号并获取历史文章列表数据,使用 BeautifulSoup 解析 HTML 数据,最后打印文章数据。
通过上述两个示例,我们可以看到使用 Python 抓取 Web 数据的方法,同时需要注意 HTTP 请求头部、Cookies 等信息的模拟和使用,以确保能够正常抓取数据。
本文链接:http://task.lmcjl.com/news/6623.html