我正试图从“https://www.pakwheels.com/forums/c/travel-n-tours”中提取所有链接,例如“沙特辛卡”。我使用Selenium web驱动程序滚动网页,但我无法提取所有链接。我得到的错误说“类型为None的对象没有href属性”任何建议?
from PageScroller import WebPageScroller
import bs4 as bs
sourceUrl='https://www.pakwheels.com/forums/c/travel-n-tours'
#----------------------- Scrolling to the bottom of page and getting source code --------------------------------------#
scrollObject=WebPageScroller
pageSource=scrollObject.getScrolledPageSource(scrollObject,sourceUrl)
# ------------------------------------- Getting links ---------------------------------- #
soup = bs.BeautifulSoup(pageSource, 'lxml')
blogUrls=[]
for url in soup.find_all('a'):
if((url.get('href').find('/forums/t/')!=-1) and (url.get('href').find('about-the-travel-n-tours-category')==-1) and (url.get('href').find('/forums/t/topic/')==-1)):
blogUrls.append(url.get('href'))
print(url.get('href'))
print(len(blogUrls))
答案 0 :(得分:0)
使用Selenium进行刮痧通常非常糟糕,而且你可以找到一种处理无限卷轴的方法。
此站点在https://www.pakwheels.com/forums/c/travel-n-tours/l/latest.json?_=<uts>
基本上有一个JSON端点,其中<uts>
是Unix时间戳。
基本上,这是如何工作的。打开Chrome DevTools或Firebug并加载论坛屏幕。查看Network
标签。有一个名为XHR
的{{1}}文件。点击它。
latest.json?_=1491493915518
显示为Request URL
。这是您的终点。
现在您只需要一个Unix时间戳和几行代码:
https://www.pakwheels.com/forums/c/travel-n-tours/l/latest.json?_=1491493915518
您将获得该页面上所有内容的JSON表示。如果您使用更新的时间戳重新运行相同的脚本,它将检索新的论坛帖子。如果你想要检索较旧的线程(甚至刮掉整个论坛),你也可以使用旧的Unix时间戳回溯。我会留给你弄清楚如何将它构建成更强大的东西。