我试图使用带有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。
答案 0 :(得分:1)
更有经验的人可能会为您的设置提供更好的建议,所以我只简单说明一下我的经验:
当我使用requests
时,有时会得到链接,有时却没有。如果不是,则响应表明它正在检查我不是机器人,并确保我的浏览器允许使用Cookie。
使用硒可以可靠地在测试中得到结果,尽管这可能不够快,或者由于其他原因您可以选择。
from selenium import webdriver
d = webdriver.Chrome()
url = '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'
d.get(url)
link = d.find_element_by_id('pagnNextLink').get_attribute('href')
print(link)
含代理硒(Firefox)
Running Selenium Webdriver with a proxy in Python
带代理的硒(Chrome)-在这里介绍得很好: