大家好,我是皮皮。
前几天在Python白银交流群有个叫【꯭】的粉丝分享了一份Python网络爬虫代码,用来获取某度关键词和链接的。当时他使用正则表达式的提取方式获取标题和链接,分享一个使用Python网络爬虫抓取百度关键词和链接的代码(正则表达式篇),今天这篇文章我们将使用bs4
来进行实现。
直接上代码了,如下所示:
# -*- coding: utf-8 -*-
# @Time : 2022/4/20 18:24
# @Author : 皮皮:Python共享之家
# @File : demo.py
import requests
from bs4 import BeautifulSoup
import time
import pandas as pd
# 从element里面进行分析,可以知道百度会给一个自己加密的Url
def convert_url(url):
resp = requests.get(url=url,
headers=headers,
allow_redirects=False
)
return resp.headers['Location']
#
# 获取url
def get_url(wd, num):
s = requests.session()
total_title = []
total_url = []
total_info = []
# 第1页为小于10的数字 10为第2页,20为第三页,30为第四页,以此类推
num = num * 10 - 10
for i in range(-10, num, 10):
url = 'https://www.baidu.com/s' # 点击界面第二页可以看到网页变化截取关键部分 https://www.baidu.com/s?wd=python&pn=10
params = {
"wd": wd,
"pn": i,
}
r = s.get(url=url, headers=headers, params=params)
print("返回状态码:", r.status_code) # 可以看对应Js 正常网页访问时候 status状态码 为200
soup = BeautifulSoup(r.text, 'lxml')
for so in soup.select('#content_left .t a'):
# g_url = convert_url(so.get('href')) # 对界面获取的url进行进行访问获取真实Url
g_url = so.get('href') # 对界面获取的url进行进行访问获取真实Url
g_title = so.get_text().replace('\n', '').strip() # 根据分析标题无对应标签 只能获取标签内文字 去掉换行和空格
print(g_title, g_url)
total_title += [g_title]
total_url += [g_url]
time.sleep(1 + (i / 10))
print("当前页码:", (i + 10) / 10 + 1)
try:
total_info = zip(total_title, total_url)
df = pd.DataFrame(data=total_info, columns=['标题', 'Url'])
df.to_csv(r'./web_data.csv', index=False, encoding='utf_8_sig')
print("保存成功")
except:
return 'FALSE'
if __name__ == '__main__':
while True: # 循环
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0",
"Host": "www.baidu.com",
}
wd = input("输入搜索内容:")
num = int(input("输入页数:"))
get_url(wd, num)
这个代码亲测好使,运行之后结果如下。
在本地也会自动地生成csv
存储文件,内容如下:
大家好,我是皮皮。这篇文章主要分享了一个使用Python网络爬虫抓取百度关键词和链接的代码。上一篇文章,使用了正则表达式来做提取,本文使用了bs4
来进行实现提取的,行之有效。下一篇文章,将给大家分享使用xpath
来提取百度关键词和链接,也欢迎大家积极尝试,一起学习。
最后感谢粉丝【꯭】分享,感谢【dcpeng】、【月神】在运行过程中给出的代码建议,感谢粉丝【冯诚】、【艾希·觉罗】等人参与学习交流。