在我们写爬虫的时候,可能会需要在爬虫里面基于当前url生成一个新的url。 下一页的链接需要上一页响应里面的参数,例如:
https://xxx.cn/comments/hotflow?mid=456116456616146&max_id=123456789&count=20
当我们拿到下一页的max_id要替换链接中原来的值,大家可以试一试,如果用正则表达式,怎么覆盖这4种情况,生成下一页的网址。 实际上,我们不需要使用正则表达式。Python自带的urllib模块已经提供了解决这个问题的方案了。编写下面方法来实现:
from urllib.parse import urlparse, urlunparse, parse_qs, urlencode
def replace_field(url, name, value):
parse = urlparse(url)
query = parse.query
query_pair = parse_qs(query)
query_pair[name] = value
new_query = urlencode(query_pair, doseq=True)
new_parse = parse._replace(query=new_query)
next_page = urlunparse(new_parse)
return next_page
url='https://xxx.cn/comments/hotflow?mid=456116456616146&max_id=123456789&count=20'
next_page = replace_field(url, 'max_id', '987654321')
print(next_page)
|