想通过xpath来爬取一系列的url,不知道哪里出错来,请指教!
import requestsfrom lxml import etree
if __name__=="__main__":
#Ua伪装
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
}
#获取页面地址
list_url = []
url_1 = "https://sc.chinaz.com/jianli/free.html"
list_url.append(url_1)
# for i in range(2,4):
# url_n = "https://sc.chinaz.com/jianli/free_{}.html".format(i)
# list_url.append(url_n)
page_text = requests.get(url=url_1,headers=headers).text
tree = etree.HTML(page_text)%
jianli_list = []
jianli_div = tree.xpath("//div[@id='main']/div/a")
for a in jianli_div:
jianli_web = a.xpath("./@href/text()")
print(jianli_web)
最后返回的结果是Process finished with exit code 0,我的目的就是想把网页里的url给添加到一个列表里去,怎么也成功不了,愁到凌晨4点了,跪请老鸟教育。。不知道是不是xpath写错了 还是什么情况 页面里所有用到的url过滤src和href即可,有的数据如果不想用,你可以遍历整个列进行剔除。
import requests
import re
def main():
url = 'https://sc.chinaz.com/jianli/free.html'
headers = {'user-agent': 'firefox'}
r = requests.get(url, headers=headers)
result = re.findall(r'(?:href|src)="(.*?)"', r.text)
print(result)
if __name__ == '__main__':
main() xpath语法错误,多学学基础。
这一段修改一下
page_text = requests.get(url=url, headers=header).text
tree = etree.HTML(page_text)
jianli_list = []
jianli_div = tree.xpath("//div[@id='main']/div/div")
for a in jianli_div:
jianli_web = 'https:' + a.xpath("a/@href")
print(jianli_web) suchocolate 发表于 2020-12-17 09:02
页面里所有用到的url过滤src和href即可,有的数据如果不想用,你可以遍历整个列进行剔除。
好像您的方式是用正则,我在学习xpath,因为好像其他编程也可以用xpath。非常感谢您的指点。 YunGuo 发表于 2020-12-17 15:45
xpath语法错误,多学学基础。
这一段修改一下
非常感谢您的指点,上个帖子也是您帮忙指点的。因为工作原因和家庭原因,每天只有这个点能有时间学习python,感谢互联网,也感谢有您这样不吝赐教的前辈!!! YunGuo 发表于 2020-12-17 15:45
xpath语法错误,多学学基础。
这一段修改一下
那最后再麻烦您一下,我之前不是想创建一个空的list_url,用来添加首页url_1和后续页url_n,做成一个分页爬取的列表集合,但是发起get请求时,url=list_url,运行后就会报错,但是换成url_1或者url_n就不会报错。请问这个地方该怎么操作呢?不知道我说清楚了没。。{:5_111:} 15972156903 发表于 2020-12-18 03:28
那最后再麻烦您一下,我之前不是想创建一个空的list_url,用来添加首页url_1和后续页url_n,做成一个分页 ...
import requests
from lxml import etree
def main():
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}
result = []
url = "https://sc.chinaz.com/jianli/free.html"
num = int(input('请输入查询的页数:'))
for i in range(num):
r = requests.get(url, headers=headers)
html = etree.HTML(r.text)
temp = html.xpath('//div[@id="main"]/div/div/a/@href')
result.extend(temp)
nx_url = html.xpath('//a[@class="nextpage"]/@href')
url = 'https://sc.chinaz.com/jianli/' + nx_url
print(result)
if __name__ == "__main__":
main() 15972156903 发表于 2020-12-18 03:28
那最后再麻烦您一下,我之前不是想创建一个空的list_url,用来添加首页url_1和后续页url_n,做成一个分页 ...
程序前面执行了将url添加到列表,你的list_url是一个包含所有url的列表,需要先利用for循环取出,再去请求,不能直接get列表。
#获取页面地址
list_url = []
url_1 = "https://sc.chinaz.com/jianli/free.html"
list_url.append(url_1)
for i in range(2,4):
url_n = "https://sc.chinaz.com/jianli/free_{}.html".format(i)
list_url.append(url_n)
# 循环取出url请求
for url in list_url:
page_text = requests.get(url, headers=headers).text
tree = etree.HTML(page_text)
jianli_list = []
jianli_div = tree.xpath("//div[@id='main']/div/div")
for a in jianli_div:
jianli_web = 'https:' + a.xpath("a/@href")
print(jianli_web) YunGuo 发表于 2020-12-18 16:11
程序前面执行了将url添加到列表,你的list_url是一个包含所有url的列表,需要先利用for循环取出,再去 ...
非常感谢,就是差那临门一脚,原来如此。。哈哈。憋了我几天了。。 suchocolate 发表于 2020-12-18 10:55
您的代码我跑了一下,好像是可以指定页的爬取。收藏了,多看看前辈代码学习经验{:5_101:} suchocolate 发表于 2020-12-18 10:55
请问下前辈,为什么在for循环里 假如爬取的是第二页或后面页,可以执行最后用前缀加nx_url拼好的url来发起get请求呢?而不是用最上面resulr下一行定义好的url呢? 15972156903 发表于 2020-12-19 03:27
请问下前辈,为什么在for循环里 假如爬取的是第二页或后面页,可以执行最后用前缀加nx_url拼好的url来发 ...
他那个代码读出来很简单啊,兄弟,python基础建议多学习。python程序是从上往下执行:
result下面那个url是第一页,for循环内那个拼接的url相当于重新赋值了result下面那个url,所以当再次循环的时候url已经不一样了,这样说能明白? YunGuo 发表于 2020-12-19 13:11
他那个代码读出来很简单啊,兄弟,python基础建议多学习。python程序是从上往下执行:
result下面那个 ...
感觉有点是懂非懂。。可能是我代码写少了。。。{:5_100:} 最近多看看大佬的代码。。自己去摸索哈。。感谢。
页:
[1]