Web Scraping,无限滚动和提取链接

时间:2017-04-05 19:25:19

标签: python selenium-webdriver web-scraping

我正试图从“https://www.pakwheels.com/forums/c/travel-n-tours”中提取所有链接,例如“沙特辛卡”。我使用Selenium web驱动程序滚动网页,但我无法提取所有链接。我得到的错误说“类型为None的对象没有href属性”任何建议? enter image description here

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))

1 个答案:

答案 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时间戳回溯。我会留给你弄清楚如何将它构建成更强大的东西。