Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过单击页面中的每个超链接来抓取网站_Python_Selenium_Web Scraping_Beautifulsoup - Fatal编程技术网

Python 通过单击页面中的每个超链接来抓取网站

Python 通过单击页面中的每个超链接来抓取网站,python,selenium,web-scraping,beautifulsoup,Python,Selenium,Web Scraping,Beautifulsoup,我试图在网页上搜索一个有住宿地点广告的网页。为了让我得到这个地方的地址,我需要点击每一个地方,只需刮取一个地址部分,然后回来做这个到下一个。这个过程需要几页 我使用美丽的汤刮和硒浏览器访问 导入urllib2 导入csv 从bs4导入BeautifulSoup 作为pd进口熊猫 进口硒 从selenium导入webdriver 导入时间 从时间上导入睡眠 erasmusu_基地=”https://erasmusu.com/en/erasmus-barcelona/student-housing?

我试图在网页上搜索一个有住宿地点广告的网页。为了让我得到这个地方的地址,我需要点击每一个地方,只需刮取一个地址部分,然后回来做这个到下一个。这个过程需要几页

我使用美丽的汤刮和硒浏览器访问

导入urllib2
导入csv
从bs4导入BeautifulSoup
作为pd进口熊猫
进口硒
从selenium导入webdriver
导入时间
从时间上导入睡眠
erasmusu_基地=”https://erasmusu.com/en/erasmus-barcelona/student-housing?english=1&id=261&p="
hdr={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','User-Agent':'Magic Browser'}
#暂时让我们凑到第二页
#此for循环用于移动到下一页
对于范围(0,2)内的i:
erasmusu=erasmusu_base+str(i)
page=urllib2.Request(erasmusu,headers=hdr)
content=urllib2.urlopen(第页).read()
browser=webdriver.Chrome()
browser.get(erasmusu_base)
ad=browser。通过xpath('/html/body/div[1]/div[1]/div[3]/div[3]/div[2]/div/ul/li[1]/div[2]/h3/a')查找元素
广告点击()

首先,我试图点击广告并打开一个标签,这样我就可以得到价格信息。然后,我将在剩下的广告中继续这个过程。

您将不得不使用Selenium来绕过网站上的保护

from selenium import webdriver
from bs4 import BeautifulSoup
from time import sleep
import re

erasmusu_base = "https://erasmusu.com/en/erasmus-barcelona/student-housing?english=1&id=261&p="
hdr= {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'User-Agent' : "Magic Browser"}

# For the time being lets scrape up to page 2
# This for loop is for moving to the next pages
browser = webdriver.Chrome()
for i in range(0, 2):
    browser.get(erasmusu_base)
    sleep(5)
    # Hide cookie pop up.
    if browser.find_elements_by_css_selector("a.hide_cookies_panel"):
        browser.find_element_by_css_selector("a.hide_cookies_panel").click()
    sleep(1)
    # Get a list of links to visit.
    hrefs = [a.get_attribute('href') for a in browser.find_elements_by_css_selector('h3 a')]
    # For each link get link.
    for href in hrefs:
        browser.get(href)
        sleep(5)
        # Use BeautifulSoup to parse address.
        soup = BeautifulSoup(browser.page_source, 'html.parser')
        # Use regex for address text and find price by class
        print(soup.find(text=re.compile('^Address|^Dirección')).parent.text, soup.find('span', {'class':'priceflat'}).text)
browser.quit()
产出:

Address: Carrer de la Garrotxa, 7, 08041 Barcelona, Spain 450 € / month
Address: Carrer de la Boqueria, 08002 Barcelona, España 800 € / month
Address: Carrer del Dos de Maig, Barcelona, Spain 495 € / month
Address: Carrer de Sant Ferran, 08031 Barcelona, Spain 340 € / month
Dirección: Carrer d'Arenys, 08035 Barcelona, Spain 400 € / mes
...
如果您使用的是Python 2.7,请添加为第一行:

# -*- coding: utf-8 -*-
和变化:

re.compile('^Address|^Dirección')


它在终端中看起来很糟糕,但如果您将其写入文件,它看起来就正常了。

您的代码中有什么不起作用?请把你的问题说清楚。首先,请试着把它变成一个问题。标题似乎暗示了一个比最后一行稍微宽一些的范围,所以perhpas会将它们对齐。在我找到这一页之前,这一切都很好。我不知道发生了什么。你正在使用哪个版本的Python?
re.compile(ur'^Address|^Dirección')