我对于用 python 编写和使用类还很陌生。我已经使用类编写了一个解析器来检查是否存在由 .get_nextpage()
方法生成的 next page
url。但是,当 .get_nextpage()
方法生成链接时,应在 try except block
中的 self.get_nextpage(soup)
行之后打印该链接在 .get_links()
方法中。我被困在这里,不知道如何才能使它成为可能。
没有其他解决方案是我所追求的。我只是想知道逻辑,如果我可以尝试的话。
我在 .get_links()
方法中使用了 while True
条件,以便它将运行,直到 .get_nextpage()
方法生成一个新的关联。 (这不是这个问题的一部分。只是为了让你知道为什么我在那里使用“while True”
)
这是刮刀:
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
url = "https://stackoverflow.com/questions/tagged/web-scraping"
class StackOverflowClass(object):
def __init__(self, link):
self.url = link
def get_links(self):
while True:
res = requests.get(self.url)
soup = BeautifulSoup(res.text,"lxml")
try:
self.get_nextpage(soup)
# what to do here to get the link generated within ".get_nextpage()" method
except:break
def get_nextpage(self,sauce):
nurl = sauce.select_one("div.pager a[rel='next']")
if nurl:
link = urljoin(self.url,nurl.get("href"))
crawler = StackOverflowClass(url)
crawler.get_links()
为了更清楚我的意思,请再次查看以下几行:
try:
self.get_nextpage(soup)
# what to do here to get the link generated within ".get_nextpage()" method
except:break
最佳答案
您可以修改您的get_nextpage
如下:
def get_nextpage(self,sauce):
nurl = sauce.select_one("div.pager a[rel='next']")
if nurl:
link = urljoin(self.url,nurl.get("href"))
return link
然后你就可以在 get_links()
中使用它获取链接值:
def get_links(self):
while True:
res = requests.get(self.url)
soup = BeautifulSoup(res.text,"lxml")
if self.get_nextpage(soup):
link = self.get_nextpage(soup)
# do whatever you want with link
else:break
请注意if
/else
使用而不是 try
/except
作为没有显式的方法/函数 return
返回None
和try: None
永远不会生成异常和循环break
不会被执行
关于python - 无法使用我的抓取工具中的方法生成的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51172489/