【发布时间】:2019-07-10 06:14:39
【问题描述】:
我尝试使用带有 lxml 的 xpath 从 html 标记中抓取下一页的 href 链接。但是 xpath 正在返回 null 列表,而它是单独测试的,它似乎可以工作。
我已经尝试过 css 选择器和 xpath,它们都返回空列表。
代码返回空值,而 xpath 似乎工作正常。
import sys
import time
import urllib.request
import random
from lxml import html
import lxml.html
import csv,os,json
import requests
from time import sleep
from lxml import etree
username = 'username'
password = 'password'
port = port
session_id = random.random()
super_proxy_url = ('http://%s-session-%s:%s@zproxy.lum-superproxy.io:%d' %(username, session_id, password, port))
proxy_handler = urllib.request.ProxyHandler({
'http': super_proxy_url,
'https': super_proxy_url,})
opener = urllib.request.build_opener(proxy_handler)
opener.addheaders = \[('User-Agent', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36')]
print('Performing request')
page = self.opener.open("https://www.amazon.com/s/ref=lp_3564986011_pg_2/133-0918882-0523213?rh=n%3A283155%2Cn%3A%211000%2Cn%3A1%2Cn%3A173508%2Cn%3A266162%2Cn%3A3564986011&page=2&ie=UTF8&qid=1550294588").read()
pageR = requests.get("https://www.amazon.com/s/ref=lp_3564986011_pg_2/133-0918882-0523213?rh=n%3A283155%2Cn%3A%211000%2Cn%3A1%2Cn%3A173508%2Cn%3A266162%2Cn%3A3564986011&page=2&ie=UTF8&qid=1550294588",headers={"User-Agent":"Mozilla/5.0"})
doc=html.fromstring(str(pageR))
html = lxml.html.fromstring(str(page))
links = html.cssselect('#pagnNextLink')
for link in links:
print(link.attrib['href'])
linkRef = doc.xpath("//a[@id='pagnNextLink']/@href")
print(linkRef)
for post in linkRef:
link="https://www.amazon.com%s" % post
我在这里尝试了两种方法,但似乎都不起作用。
我正在使用代理服务器来访问链接,它似乎可以工作,因为“doc”变量正在填充 html 内容。我检查了链接,并且在正确的页面上获取此 xpath/csslink。
【问题讨论】:
-
你能把代码的顶部也显示出来吗?
-
已更新.. @QHarr
-
你能给我什么建议吗?我被困在这里:(@QHarr
-
代理会掩盖上述问题,但它仍然没有响应,这正是我所关心的。
-
我使用 xpath 检查了“标题”,而它显示了预期的输出。
标签: python xpath web-scraping css-selectors lxml