【问题标题】:Error while trying to scrape two pages at the same time - Python, bs4尝试同时抓取两个页面时出错 - Python,bs4
【发布时间】:2020-04-16 03:53:13
【问题描述】:

我正在尝试从(主)网站上抓取一些电影的链接,然后从这些链接中抓取内容。

在下面的代码中,我尝试只使用一个链接,但最终,我将为所有链接使用循环。

from urllib.request import urlopen
from bs4 import BeautifulSoup as soup
import csv

def make_soup(url):
    # opening up connection, grabbing the page
    source = urlopen(url).read()

    # opening up connection, grabbing the page
    page_soup = soup(source, "lxml")

    return page_soup


soup = make_soup('https://letterboxd.com/top10ner/list/2020-edition-top10ners-1001-greatest-movies/')

#### code for grabbing the links
#### link = first_link

my_url = str(link)

new_soup = make_soup(my_url)

new_cont = new_soup.find('div', {'id':'content'})

我得到一个错误:

Traceback(最近一次调用最后一次): 文件“/Users/calinap/PycharmProjects/WebScraping/letterboxd_scrape.py”,第 34 行,在 new_cont = new_soup.find('div', {'id':'content'}) getattr 中的文件“/Users/calinap/PycharmProjects/WebScraping/venv/lib/python3.8/site-packages/bs4/element.py”,第 2127 行 引发属性错误( AttributeError:ResultSet 对象没有“find”属性。您可能将元素列表视为单个元素。当你打算调用 find() 时,你调用了 find_all() 吗?

【问题讨论】:

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


    【解决方案1】:

    这可能不是必需的 my_url = "'" + str(link) + "'"

    只要my_url = str(link)

    好的。我想我知道发生了什么——你正试图打开一个用 JS 呈现的页面。某些页面,例如 facebook - 广泛使用此方法。他们没有向您发送结果页面,您可以从中解析和提取数据,而是向您发送 JavaScript 代码,需要执行该代码以生成带有结果的页面。如果你确实需要这个逻辑——你需要使用无头浏览器,比如chromium

    你需要替换这个:

    source = urlopen(url).read()
    

    用一些东西链接这个:

    from selenium import webdriver
    driver = webdriver.Chrome("./chromedriver")
    source = driver.get(url)
    

    看看这里: https://selenium-python.readthedocs.io/getting-started.html

    【讨论】:

    • 这就是我打印汤得到的结果:[]。虽然没有错误
    • 给我一个链接的例子
    • 我已经单独测试了链接,它正在工作
    • 可能链接丢失https:// - 如果是这样,那么你应该添加它 - 你的浏览器足够智能,可以自动完成,你的 BeautifulSoup4 不是
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    相关资源
    最近更新 更多