import requests import re headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'} def baidu(page): num = (page - 1) * 10 url = 'http://www.baidu.com/s?ie=utf-8&medium=0&rtt=1&bsst=1&rsv_dl=news_b_pn&cl=2&wd=meizu&tn=news&rsv_bp=1&rsv_sug3=16&rsv_sug1=6&rsv_sug7=100&oq=&rsv_btype=t&f=8&inputT=5752&rsv_sug4=6599&x_bfe_rqs=032000000000000000004800000000000000000000000008&x_bfe_tjscore=0.080000&tngroupname=organic_news&newVideo=12&goods_entry_switch=1&pn='+ str(num) res = requests.get(url, headers=headers).text baidu(i+1) print("第"+str(i+1)+"页爬取成功") import re p_title = '}"><!--s-text-->(.*?)<!--/s-text--></a></h3><div class=' #提取标题 title=re.findall(p_title,res,re.S) print(title) p_info = 'c-gap-right-xsmall" aria-label=".*?">(.*?)</span><span ' #提取时间 info=re.findall(p_info,res,re.S) print(info) p_href= '<a class="source-link_Ft1ov" href="(.*?)"' #提取网址 href=re.findall(p_href,res,re.S) print(href) p_souce='<span class="c-color-gray" aria-label=".*?">(.*?)</span>' #提取来源 souce=re.findall(p_souce,res,re.S) print(souce) for i in range(len(title)): title[i]=re.sub('<.*?>','',title[i]) #去掉<em>、</em> print(str(i+1)+"."+title[i]+' ('+info[i]+"-"+souce[i]+')') print(" ",href[i])
时间: 2024-02-22 13:01:07 浏览: 124
'''模拟浏览器头部信息'''headers = 'User-Agent': 'Mozilla/5.0 (
您的代码中有一些问题需要修改:
1. 在 `baidu` 函数中,递归调用 `baidu` 函数时,应该传入 `page` 参数而不是 `i+1`。
2. 在正则表达式中,如果要匹配 `'` 或 `"` 等特殊字符,需要在前面加上反斜线 `\` 进行转义。
3. 在正则表达式中,应该使用非贪婪模式 `.*?` 代替贪婪模式 `.*`,以避免匹配到多余的内容。
下面是修改后的代码:
```python
import requests
import re
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
}
def baidu(page):
num = (page - 1) * 10
url = 'http://www.baidu.com/s?ie=utf-8&medium=0&rtt=1&bsst=1&rsv_dl=news_b_pn&cl=2&wd=meizu&tn=news&rsv_bp=1&rsv_sug3=16&rsv_sug1=6&rsv_sug7=100&oq=&rsv_btype=t&f=8&inputT=5752&rsv_sug4=6599&x_bfe_rqs=032000000000000000004800000000000000000000000008&x_bfe_tjscore=0.080000&tngroupname=organic_news&newVideo=12&goods_entry_switch=1&pn=' + str(num)
res = requests.get(url, headers=headers).text
# 在这里可以对 res 进行数据解析和处理
# ...
if page < 5:
baidu(page+1)
print("第"+str(page)+"页爬取成功")
p_title = '}"><!--s-text-->(.*?)<!--/s-text--></a></h3><div class=' #提取标题
title = re.findall(p_title, res, re.S)
print(title)
p_info = 'c-gap-right-xsmall" aria-label="(.*?)">' #提取时间
info = re.findall(p_info, res, re.S)
print(info)
p_href = '<a class="source-link_Ft1ov" href="(.*?)"' #提取网址
href = re.findall(p_href, res, re.S)
print(href)
p_source = '<span class="c-color-gray" aria-label="(.*?)">' #提取来源
source = re.findall(p_source, res, re.S)
print(source)
for i in range(len(title)):
title[i] = re.sub('<.*?>', '', title[i]) #去掉<em>、</em>
print(str(i+1) + "." + title[i] + ' (' + info[i] + " - " + source[i] + ')')
print(" ", href[i])
```
需要注意的是,百度搜索结果的页面结构经常会发生变化,如果您的代码无法正常提取数据,可能需要根据实际情况进行调整。另外,爬虫程序需要遵守网站的爬虫规则,不得过度访问和请求网站,避免对网站造成负担和影响。
阅读全文