lihu5841314 发表于 2021-5-31 12:55

正则的问题在哪里呢?? 为啥为空? 抓包里面有的啊

本帖最后由 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)

89684828 发表于 2021-5-31 13:11

前面加r了,里面内容不用再转义

bluerabbit 发表于 2021-5-31 13:18

1. 前面加了 r,里面就不用再转义
2. sep2 里确实没有正则对应的内容,是不是需要先模拟登录?

ligxi 发表于 2021-5-31 13:37

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)

lihu5841314 发表于 2021-5-31 13:37

bluerabbit 发表于 2021-5-31 13:18
1. 前面加了 r,里面就不用再转义
2. sep2 里确实没有正则对应的内容,是不是需要先模拟登录?

用network抓的包的里面搜索得翻啊

Glenn 发表于 2021-5-31 13:44

本帖最后由 Glenn 于 2021-5-31 13:45 编辑

你是要获取 href 里的内容吗?   可以这样 re.findall(r'(?<=href=\")\S+', sep2)[:-1]   

知心 发表于 2021-5-31 13:49

你这个代码着实写的有些草率呀?你要匹配的这个内容是请求首页,返回结果里边查找下一页的地址。结果详情页里边去匹配了,怎么能匹配到呢

lifeixue 发表于 2021-5-31 13:59


在详情页内匹配分页地址,这波操作我是着实看不懂

Ifover 发表于 2021-5-31 14:43

urllib.parse(拼不来可以用么

lifeixue 发表于 2021-5-31 15:42

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
查看完整版本: 正则的问题在哪里呢?? 为啥为空? 抓包里面有的啊