我正在尝试废弃this
r = requests.get(url)
soup = BeautifulSoup(r.text , 'lxml')
details = soup.find_all('span', {'class' : 'src'})
details = soup.find_all('div', {'class' : 'product_contain'})
i=0
for d in details:
print(i,d.get_text(strip=True).strip())
i+=1
但是它只抓取一个网页。我检查了XHR
,但是当它更改页面时什么也没触发。
我还检查了 advancesearch.aspx 中的FORM DATA
,但是它也没有与页面索引相关的信息。
在页面点击事件中,我发现了ctl00$ContentPlaceHolder1$gvItem$ctl01$ctl03
,但不确定如何在URL中使用它。
我应该使用哪个URL访问其他页面?
答案 0 :(得分:2)
在这种情况下,应使用Selenium,它将在浏览器中打开页面,然后可以处理导航器按钮的click事件并每次访问刷新的DOM。这是一个简单的代码供您参考:
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://www.google.com")
browser.find_element_by_id("lst-ib").send_keys("book")
browser.find_element_by_name("btnK").click()
答案 1 :(得分:0)
您共享的页面url显示可以通过以下超链接标记访问页面编号:
<a class="pager currentpage">
<a class="pager">
您可以按以下方式访问相关信息。第二行将为您提供所有页面的列表。从其中提取"href"
属性。当您单击该按钮时,将触发javascript,并且很可能会附加一部分网址以打开新页面。
soup.findall('a', _class="pager currentpage")
soup.findall('a', _class="pager")
这是按钮之一的文本。您将需要进一步研究页面源代码,以找出所需的网址。
<a class="pager currentpage"
href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(
"ctl00$ContentPlaceHolder1$gvItem$ctl01$ctl03",
"",
true, "",
"", false, true))"
style="display:inline-block;width:27px;">1</a>
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
使用selenium
浏览器自动化来执行此类用JavaScript包装的按钮的点击。
答案 2 :(得分:0)
没有selenium
,我就能实现。尽管代码不完整,但是我们可以通过循环__EVENTTARGET
from bs4 import BeautifulSoup
import requests,json
def returnJson(wordmark):
url = "https://classicalnumismaticgallery.com/advancesearch.aspx?auctioncode=0&pricerange=0&keyword=indore&category=&material=0&lotno=&endlotno="
r_init = requests.get(url)
soup = BeautifulSoup(r_init.text, 'html.parser')
event_validation = soup.find("input", attrs={"name" : "__EVENTVALIDATION"})['value']
view_state = soup.find("input", attrs={"name" : "__VIEWSTATE"})['value']
pages=4
event_target = 'ctl00$ContentPlaceHolder1$gvItem$ctl01$ctl{:>02d}'.format(pages)
postdata = {
'ctl00$ContentPlaceHolder1$DDLFilter' : '0',
'__EVENTVALIDATION' : event_validation,
'__EVENTTARGET' : event_target,
"__VIEWSTATE" : view_state,
}
r = requests.post(url, data=postdata)
return r
def scrapping(r):
description=''
soup = BeautifulSoup(r.text, 'html.parser')
desc = soup.find_all('div' , {'class' : 'product_contain'})
for d in desc:
print(d)
scrapping(returnJson('indore'))