正则的问题在哪里呢?? 为啥为空? 抓包里面有的啊
本帖最后由 lihu5841314 于 2021-5-31 16:41 编辑importos
import re
importrequests
fromlxml importetree
url = "https://www.qidian.com/all"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
}
sep1=requests.get(url=url,headers=headers).text
tree = etree.HTML(sep1)
detail_url ="https:"+tree.xpath('//div[@class="all-book-list"]//a/@href')
sep2 = requests.get(url=detail_url,headers=headers).text
url2 = re.findall(r'//www\.qidian\.com/all\?orderId=&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=0&page=(\d+)',sep2)
print(url2) 前面加r了,里面内容不用再转义 1. 前面加了 r,里面就不用再转义
2. sep2 里确实没有正则对应的内容,是不是需要先模拟登录? import re
import requests
from lxml import etree
url = "https://www.qidian.com/all"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
}
sep = requests.get(url=url, headers=headers).text
tree = etree.HTML(sep)
# 书籍地址
detail_url = tree.xpath('//ul[@class="all-img-list cf"]/li/div/a/@href')
for d in detail_url:
print('https:' + d)
# 页码
rec = re.compile(r'<a data-page="\d+" href="//(.*?)"', re.S)
ref = rec.findall(sep)
for f in ref:
print(f)
bluerabbit 发表于 2021-5-31 13:18
1. 前面加了 r,里面就不用再转义
2. sep2 里确实没有正则对应的内容,是不是需要先模拟登录?
用network抓的包的里面搜索得翻啊 本帖最后由 Glenn 于 2021-5-31 13:45 编辑
你是要获取 href 里的内容吗? 可以这样 re.findall(r'(?<=href=\")\S+', sep2)[:-1] 你这个代码着实写的有些草率呀?你要匹配的这个内容是请求首页,返回结果里边查找下一页的地址。结果详情页里边去匹配了,怎么能匹配到呢
在详情页内匹配分页地址,这波操作我是着实看不懂 urllib.parse(拼不来可以用么 import re
import requests
from lxml import etree
url = "https://www.qidian.com/all"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
}
sep1 = requests.get(url=url, headers=headers).text
tree = etree.HTML(sep1)
# detail_url = "https:" + tree.xpath('//div[@class="all-book-list"]//a/@href')
# sep2 = requests.get(url=detail_url, headers=headers).text
print("----------获取分页地址第一种方法:使用正则-----------")
url2 = re.findall(r'<a data-page="\d+" href="(.*?)"', sep1)# 页码(楼主原来的问题就是在这里出错的)
"""
这里补充一下你原来的问题出在哪里:
1.正则匹配的是括号内的内容
2.楼主不应该在sep2(详情页)内匹配页码,而应该在sep1(首页url)内匹配页码
3.楼主正则表达式有误
"""
for i in url2:
pages = "https:" + i
print(pages)
print("----------获取分页地址第二种方法:使用xpath-----------")
url2 = tree.xpath("//div//ul/li[@class='lbf-pagination-item']/a/@href")# 页码
for i in url2:
pages = "https:" + i
print(pages)
print("以上两种方法,更推荐使用正则,相对简单")
页:
[1]
2