【问题标题】:Request.get not rendering all 'hrefs' in HTML PythonRequest.get 未在 HTML Python 中呈现所有“href”
【发布时间】:2020-09-07 19:28:27
【问题描述】:

我正在尝试获取多个网站的“联系我们”页面。它适用于某些网站,但对于某些网站,request.get 呈现的文本不包含所有“href”链接。当我在浏览器中检查页面时,它是可见的,但在请求中没有通过。 试图寻找解决方案,但没有运气:-

下面是我要抓取的代码和网页https://portcullis.co/ :-

headers = {"Accept-Language": "en-US, en;q=0.5"}
def page_contact(url):
    r = requests.get(url, headers = headers)
    txt = BeautifulSoup(r.text, 'html.parser')
    links = []
    for link in txt.findAll('a'):
        links.append(link.get('href'))
    return r, links

生成的输出是:-

<Response [200]> [] 

由于它在其他一些网站上运行良好,我希望以一种不仅适合本网站,而且适合所有网站的方式对其进行编辑,

非常感谢任何帮助! 谢谢!!!

【问题讨论】:

  • 很多网站都是通过js添加html的,也就是说你在使用requests的时候是不会得到的。你可能想看看Selenium

标签: python-3.x web-scraping beautifulsoup python-requests


【解决方案1】:

这是另一种仅使用 selenium 而不是 BeautifulSoup 来解决此问题的方法

        browser = selenium.webdriver.Chrome(chrome.exe)
        browser.get(url)
        browser.set_page_load_timeout(100)
        time.sleep(3)             
        WebDriverWait(browser, 20).until(lambda d: d.find_element_by_tag_name("a"))
        time.sleep(20)
        elements = browser.find_elements_by_xpath("//a[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') , 'contact')]")
        for el in elements:
            final_link.append(el.get_attribute("href"))

【讨论】:

    【解决方案2】:

    这将为您获取源页面信息,您可以通过将其传递给 beautifulsoup 来找到相关链接

    from selenium import webdriver
    import time
    
    browser = webdriver.Chrome(r'path to your chrome exe')
    browser.get('Your url')
    time.sleep(5)
    htmlSource = browser.page_source
    txt = BeautifulSoup(htmlSource, 'html.parser')
    browser.close()
    links = []
    for link in txt.findAll('a'):
        links.append(link.get('href'))
    

    【讨论】:

    • 谢谢,有帮助!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 2019-01-21
    • 2017-07-21
    • 2014-03-14
    • 2017-09-04
    • 2016-06-02
    相关资源
    最近更新 更多