python - 使用 python 从 url 列表中抓取网页
问题描述
我正在尝试从列表中抓取一些列表属性网站。我编写了简单的代码来从一个 url 获取数据,但是当我尝试使用 list ['url1','url2'] 时,我没有任何结果。我也在尝试使用 csv 列表,但我仍然一无所有。我检查了很多类似的主题,但结果仍然是空的。你能帮我理解怎么做吗?
'''
import lxml
import requests
import pandas as pd
from bs4 import BeautifulSoup
url = 'https://www.zillow.com/homedetails/105-Itasca-St-Boston-MA-02126/59137872_zpid/'
response = requests.get(url)
req_headers = {
'accept':
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'en-US,en;q=0.8',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/61.0.3163.100 Safari/537.36'
}
with requests.Session() as s:
url
r = s.get(url, headers=req_headers)
soup = BeautifulSoup(r.content, 'lxml')
price = soup.find('span', {'class': 'ds-value'}).text
property_type = soup.find('span', {'class': 'ds-home-fact-value'}).text
address = soup.find('h1', {'class': 'ds-address-container'}).text
price, property_type, address '''
解决方案
要完成您对多个 url 的要求,您需要做的就是将它们放在一个列表中并对其进行迭代:
import requests
from bs4 import BeautifulSoup
urls = [
'https://www.zillow.com/homedetails/105-Itasca-St-Boston-MA-02126/59137872_zpid/',
]
with requests.Session() as s:
for url in urls:
r = s.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
# do something with soup
但是,这里的主要问题是您的示例网页上几乎所有有趣的东西似乎都是由 JavaScript 生成的。例如,如果您:
print(soup.body)
您将看到该网页的 html 正文几乎没有(没有价格、没有房屋详细信息等),除了用于验证您是人类的验证码机制。您需要找到一种方法来等待 JavaScript 在页面上呈现,以便能够抓取详细信息。查看 python 模块selenium作为实现此目的的潜在解决方法。
推荐阅读
- c++ - 如何使用 MSVC 命令行工具链正确编译和链接资源文件?
- ios - SwiftUI MapKit UIViewRepresentable MKLocalSearch 区域不起作用和集群
- ansible - ansible aws_ssm 查找失败并出现验证异常
- javascript - 如何在div之后添加一段文字?(反应js,引导)
- magento2 - 尝试安装 magento 2.6.p1 即使在删除分号后它仍显示缺少扩展错误
- pine-script - UNIX 中每个烛台的持续时间
- php - 为什么这个 cURL 脚本不起作用的任何想法
- flutter - 有没有办法在 Flutter 中缓存 Canvas 的一部分以更快地绘制它?
- windows - PS如果系统制造商然后运行
- mysql - 如何删除 MYSQL 表上的重复数据以便能够应用唯一值约束