山亭建设局网站,知名建站公司,海阳手机网站开发,创建网站哪个好目录
前言
Python爬虫概述
简单实践 - 获取豆瓣电影排行榜
1. 分析目标网页
2. 获取页面内容
3. 解析页面
4. 数据存储
5. 使用代理IP
总结 前言
Python爬虫是指通过程序自动化地对互联网上的信息进行抓取和分析的一种技术。Python作为一门易于学习且强大的编程语言因其拥有丰富的第三方库和强大的数据处理能力使得它成为了爬虫开发中的最佳选择。本文将简单介绍Python爬虫的概述并提供一个简单的实践案例同时会使用代理IP来提高爬虫的效率。 Python爬虫概述
Python爬虫由三个部分组成网页下载、网页解析、数据存储。
网页下载从互联网上获取需要的数据通常使用requests库或urllib库来实现网页解析将下载下来的网页进行处理提取出需要的信息常见的解析库有BeautifulSoup和xpath等数据存储将获取到的数据存储到文件、数据库等中通常使用sqlite、MySQL等数据库或者csv、json等文件格式
简单实践 - 获取豆瓣电影排行榜
下面将通过一个简单的实践来讲解Python爬虫的应用。
1. 分析目标网页
首先打开浏览器访问[豆瓣电影排行榜](https://movie.douban.com/chart)观察页面我们会发现电影排行榜的信息都在HTML的table标签中并且每个电影信息都是一个tr标签。每个电影信息包括电影名称、评分、导演、演员、链接等等。因此我们需要使用Python程序来获取这些电影的信息。
2. 获取页面内容
网页下载是爬虫的第一步我们使用Python的requests库来获取目标网页的HTML代码。代码如下
import requestsurl https://movie.douban.com/chart
user_agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
headers {User-Agent: user_agent}r requests.get(url, headersheaders)
if r.status_code 200:html r.text
这里我们设置了请求头模拟浏览器的请求以免被目标网站认为是爬虫而禁止访问。
3. 解析页面
我们使用Python的BeautifulSoup库来解析页面。该库提供了一种非常方便的方式来操作HTML和XML文档能够方便地获取特定元素、属性和文本等信息。我们首先使用lxml解析器将HTML代码转换成BeautifulSoup对象然后根据标签和属性的CSS选择器来遍历HTML文档并提取需要的内容。代码如下
from bs4 import BeautifulSoupsoup BeautifulSoup(html, featureslxml)
table soup.find(table, {class: ranking-list})
tbody table.find(tbody)
trs tbody.findAll(tr)movies []
for tr in trs:td_name tr.find(td, {class: titleColumn})name td_name.find(a).textrating tr.find(span, {class: rating_num}).textdirector td_name.find(div, {class: bd}).find_all(p)[0].textactors td_name.find(div, {class: bd}).find_all(p)[1].textlink td_name.find(a)[href]movie {name: name, rating: rating, director: director, actors: actors, link: link}movies.append(movie)for movie in movies:print(movie)
这里我们使用find()方法来查找特定的标签和属性并使用text属性来获取标签中的文本。需要注意的是如果标签不存在或者不存在某个属性那么会返回None因此需要进行一定的判断和处理。
4. 数据存储
最后我们将获取到的电影信息保存到CSV文件中。代码如下
import csvfilename movies.csv
with open(filename, w, newline, encodingutf-8) as f:writer csv.writer(f)writer.writerow([电影名, 评分, 导演, 演员, 链接])for movie in movies:writer.writerow([movie[name], movie[rating], movie[director], movie[actors], movie[link]])
使用csv库的writerow()方法将电影信息逐行写入CSV文件中。
5. 使用代理IP
有些网站会对爬虫程序进行限制例如设置访问频率限制、封禁IP等操作。因此我们需要使用代理IP来解决这一问题。代理IP可以让我们通过代理服务器来访问目标网站从而提高访问速度和安全性。
我们可以通过一些免费的代理IP网站来获取代理IP例如站大爷代理ip、开心代理等。代码如下
import requestsurl https://movie.douban.com/chart
user_agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
headers {User-Agent: user_agent}proxy_url https://www.zdaye.com//
proxy_headers {User-Agent: user_agent}proxies []
r requests.get(proxy_url, headersproxy_headers)
if r.status_code 200:soup BeautifulSoup(r.text, featureslxml)table soup.find(table, {id: ip_list})tbody table.find(tbody)trs tbody.findAll(tr)for tr in trs:tds tr.find_all(td)if len(tds) 6 and tds[5].text HTTP:ip tds[1].text : tds[2].textproxies.append(ip)for proxy in proxies:try:print(Using proxy:, proxy)proxy_dict {http: http:// proxy, https: https:// proxy}r requests.get(url, headersheaders, proxiesproxy_dict, timeout5)if r.status_code 200:html r.textbreakexcept:continue
这里我们定义一个proxies列表来保存获取到的代理IP然后遍历该列表中的每个代理IP进行访问。如果某个代理IP无法访问则使用下一个代理IP进行访问直到访问到目标网页为止。需要注意的是如果代理IP无法使用或者响应时间过长需要考虑使用其他IP或者增加超时时间。
总结
Python爬虫是一种非常有用的技术通过Python程序自动化地获取互联网上的数据为我们带来了许多便利。在实践中我们需要注意遵守法律法规和爬虫道德规范以避免产生不良后果。