分享一个使用Python网络爬虫抓取百度关键词和链接的代码
分享一个使用Python网络爬虫抓取百度关键词和链接的代码
唉,今天真是累死我了,下班回家还得给你们写教程。不过说实话,这个爬虫小玩意儿还挺有意思的,咱们来聊聊呗。
我记得刚入行那会儿,对爬虫可是又爱又恨。爱的是它能帮我们获取海量数据,恨的是有时候爬着爬着就被封IP了,那叫一个郁闷。不过别怕,今天咱们就来整个简单的,爬爬百度的关键词和链接,保证不会把你整得焦头烂额。
准备工作
首先呢,咱们得把必要的库装上。你要是还没装,赶紧去terminal里敲这几行:
pip install requests
pip install beautifulsoup4
requests是用来发送HTTP请求的,beautifulsoup4则是用来解析HTML的。这俩搭配起来,简直就是爬虫界的黄金搭档。
代码实现
好了,废话不多说,直接上代码:
import requests
from bs4 import BeautifulSoup
import re
def get_baidu_results(keyword, pages=1):
results = []
for page in range(pages):
url = f“https://www.baidu.com/s?wd={keyword}&pn={page*10}”
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.3'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
for result in soup.find_all('div', class_='result'):
title = result.find('h3', class_='t').text if result.find('h3', class_='t') else ''
link = result.find('a')['href'] if result.find('a') else ''
snippet = result.find('div', class_='c-abstract').text if result.find('div', class_='c-abstract') else ''
results.append({
'title': title,
'link': link,
'snippet': snippet
})
return results
# 使用示例
keyword = “Python爬虫”
results = get_baidu_results(keyword, pages=2)
for result in results:
print(f“标题: {result['title']}”)
print(f“链接: {result['link']}”)
print(f“摘要: {result['snippet']}”)
print('-' * 50)
代码解析
这段代码看着挺长,其实逻辑很简单。我们定义了一个get_baidu_results函数,它接收两个参数:要搜索的关键词和要爬取的页数。
函数内部,我们用一个for循环来遍历每一页。对于每一页,我们构造URL,发送请求,然后用BeautifulSoup解析返回的HTML。
在解析过程中,我们找到每个搜索结果(div标签,class为result),然后从中提取标题、链接和摘要。这些信息被存储在一个字典中,然后添加到results列表。
我们返回这个results列表。
温馨提示:百度可能会对频繁的请求进行限制。如果你发现代码运行时出现异常,可以试试加个延时,或者使用代理IP。
实际应用
这个小工具有啥用呢?还真别说,用处可大了。
比如说,你是个SEO(搜索引擎优化)从业者,想看看某个关键词在百度的搜索结果是啥样的,这个工具就能帮你快速获取大量数据。
又或者,你在做一个领域的研究,想看看百度上关于这个领域的主要网站有哪些,用这个工具也能快速获取。
还有啊,要是你是个程序员(废话,不是程序员能看懂这代码吗),你可以把这个工具集成到你的其他项目中。比如说,你正在开发一个新闻聚合网站,可以用这个工具来获取最新的新闻链接。
总之啊,这种爬虫工具,只要你脑洞够大,用途就无穷无尽。
不过啊,我得提醒你一句,爬虫这玩意儿虽然好用,但也得注意分寸。不要爬取别人的隐私数据,也不要对网站造成太大压力。咱们要做个有道德的程序员,对不对?
行了,今天就聊到这儿吧。我得去睡觉了,明天还得早起上班呢。你要是有啥不懂的,就在评论区问吧,我看到了会回复的。晚安咯!