url = r"https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E7%A6%8F%E5%B7%9E%E5%A4%A7%E5%AD%A6" r的作用
时间: 2024-02-12 11:01:42 浏览: 207
在Python中,r前缀用于创建原始字符串(raw string)。原始字符串是指字符串中的转义字符(如\n、\t等)不会被转义,而是按照字面意义进行解释。在URL中,有许多特殊字符(如%、&等),如果不使用原始字符串,需要对这些特殊字符进行转义处理,而使用原始字符串可以避免这种转义操作。
在给定的URL中,r前缀表示该字符串是一个原始字符串,其中的特殊字符不会被转义。这样可以方便地处理URL中的特殊字符,而不需要手动进行转义操作。
相关问题:
1. Python中的原始字符串是什么?
2. 为什么在处理URL时需要使用原始字符串?
3. URL中的特殊字符有哪些需要进行转义处理?
相关问题
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])
您的代码中有一些问题需要修改:
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])
```
需要注意的是,百度搜索结果的页面结构经常会发生变化,如果您的代码无法正常提取数据,可能需要根据实际情况进行调整。另外,爬虫程序需要遵守网站的爬虫规则,不得过度访问和请求网站,避免对网站造成负担和影响。
idu/com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=国家法院新法徽矢量图 使用js,解析路径及参数,参数形成对象
可以使用JavaScript中的URLSearchParams()构造函数解析URL中的参数,并将参数转换为对象形式。示例代码如下:
```javascript
const url = "idu/com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=国家法院新法徽矢量图";
const [path, search] = url.split("?"); // 分离出路径和查询字符串
const params = new URLSearchParams(search); // 将查询字符串转换为参数对象
const obj = {};
for (const [key, value] of params) {
obj[key] = value;
}
console.log("路径为:" + path);
console.log("参数为:");
console.log(obj);
```
输出结果为:
```
路径为:idu/com/s
参数为:
{
ie: "utf-8",
f: "8",
rsv_bp: "1",
tn: "baidu",
wd: "国家法院新法徽矢量图"
}
```
在上面的代码中,我们首先使用split()方法将URL分离成路径和查询字符串两部分,然后使用URLSearchParams()构造函数将查询字符串转换为参数对象。最后,我们使用for...of循环遍历参数对象,将参数键值对存储到一个新对象中。
阅读全文