我试图用BeautifulSoup从一个网站上抓取一些信息,但我遇到了很大的麻烦。我已经搜索并试图弄清楚这一点,现在已经有好几个小时了,但我还是弄不明白。我正在试着从(https://www.duckduckgo.com/privacy)中抓取公司的标题,上面写着红色粗体文本以及提供的数量(描述底部的数字)。我知道代码目前只查找"h2“而不是段落,我也知道精确匹配的是一个超链接"a”,但我找不到一次在一个标记中搜索多个类的解决方案,因为超链接的原始类是"class="link ng-binding"“,我不知道如何同时引用它们中的多个,所以我试图指出包含超链接本身的单个类"h2”标题。这是我遇到问题的代码:
from urllib.request import urlopen
from bs4 import BeautifulSoup
# Scrape company names, offers
toScrape = "https://www.duckduckgo.com/privacy"
requestPage = urlopen(toScrape)
pageHTML = requestPage.read()
requestPage.close()
HTMLSoup = BeautifulSoup(pageHTML, 'html.parser')
scrapedItems = HTMLSoup.find_all('h2')
CSVExport = 'ConectHeader.csv'
save = open(CSVExport, 'w')
CSVHeaders = 'Price, stock\n'
for item in scrapedItems:
company = item.find('h2', class_="title").text
offers = item.find('p', class_="estates-cnt").text
save.write(company + '' + stock)
在我的IDE中,我没有收到任何错误甚至警告。该过程以退出代码0结束,但是当我打开最终的.csv文件时,它并没有包含任何信息。我不明白为什么输出没有保存到csv文件中。我也试过通过print运行它,print返回了"[]“,这可能意味着问题不是由保存到csv文件中的数据直接引起的。感谢任何人对此的任何帮助,我现在正因为这个而撕裂我的头发!
发布于 2020-11-13 09:57:04
BeautifulSoup
看不到动态呈现的内容,就像本例中一样。但是,有一个API可以查询,它会返回所需的所有数据。
下面是操作步骤:
import time
import requests
data = requests.get(f"https://www.sreality.cz/api/cs/v2/companies?page=2&tms={int(time.time() * 1000)}").json()
for company in data["_embedded"]["companies"]:
print(f"{company['url']} - {company['locality']}")
这将打印:
Sklady-cz-Praha-Stodulky - Praha, Stodůlky, Bucharova
PATOMA-Praha-Nove-Mesto - Praha, Nové Město, Washingtonova
Molik-reality-s-r-o-Most - Most, Moskevská
ERA-Reality-Praha-Holesovice - Praha, Holešovice, Jankovcova
LOKATIO-Praha-Zizkov - Praha, Žižkov, Kubelíkova
REAL-SPEKTRUM-Brno-Veveri - Brno, Veveří, Lidická
FARAON-reality-Praha-Vinohrady - Praha, Vinohrady, Polská
108-AGENCY-s-r-o-Praha-Zizkov - Praha, Žižkov, Příběnická
Realitni-spolecnost-Mgr-Jan-Vodenka-Praha-Nove-Mesto - Praha, Nové Město, Václavské náměstí
RapakCo-s-r-o-Praha-Zizkov - Praha, Žižkov, Žerotínova
Euro-Reality-Plzen-s-r-o-Plzen-Vychodni-Predmesti - Plzeň, Východní Předměstí, Šafaříkovy sady
Happy-House-Rentals-s-r-o-realitni-kancelar-Praha-Vinohrady - Praha, Vinohrady, Uruguayská
VIAGEM-servisni-s-r-o-Praha-Karlin - Praha, Karlín, Sokolovská
I-E-T-Reality-s-r-o-Brno-Brno-mesto - Brno, Brno-město, náměstí Svobody
RK-NIKA-realitni-kancelar-Semily - Semily, Sokolská
FF-Reality-2014-s-r-o-Praha-Karlin - Praha, Karlín, Pernerova
REALITY-PRORADOST-Breclav - Břeclav, Lidická
ORCA-ESTATE-a-s-Kyjov - Kyjov, Jungmannova
RAZKA-reality-Tachov - Tachov, náměstí Republiky
LUXENT-Exclusive-Properties-Praha-Josefov - Praha, Josefov, Pařížská
您可以更进一步,首先发出一个获取结果总数的请求,然后循环遍历每个页面。
import time
import requests
api_endpoint = "https://www.sreality.cz/api/cs/v2/companies?"
query = f"tms={int(time.time() * 1000)}"
initial_request = requests.get(f"{api_endpoint}{query}").json()
total_results = initial_request["result_size"]
for page in range(1, total_results + 1):
current_url = f"{api_endpoint}page={page}&tms={int(time.time() * 1000)}"
data = requests.get(current_url).json()
for company in data["_embedded"]["companies"]:
print(f"{company['url']} - {company['locality']}")
发布于 2020-11-13 09:48:31
Selenium要好得多,也更容易使用它们BeautifulSoup
还有更多对selenium的支持。
https://stackoverflow.com/questions/64818657
复制相似问题