使用python从网址列表中进行网页抓取

时间:2020-02-25 16:57:48

标签: python web-scraping

我正在尝试从列表中抓取一些列表属性网站。我编写了简单的代码来从一个URL中获取数据,但是当我尝试使用列表['url1','url2']时,结果什么也没有。我也在尝试使用csv list,但是我仍然一无所有。我检查了很多类似的主题,但结果还是空的。您能帮我了解如何做吗?

'''

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

1 个答案:

答案 0 :(得分:2)

要完成您要使用多个网址执行的操作,只需将它们放入列表中并对其进行遍历:

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 视为完成此任务的一种可能的解决方法。