[英]parsing html by using beautiful soup and selenium in python
我想通过在Python中使用BeautifulSoup和Selenium来练习一个真实示例(Airbnb)的抓取。 具体来说,我的目标是获取洛杉矶内的所有房屋(房屋)ID。 我的策略是打开一个浏览器,然后转到Airbnb网站,在那里我已经手动搜索了洛杉矶的房屋,并从这里开始。 在此过程之前,我决定使用硒。 之后,我想在源代码中解析HTML代码,然后找到当前页面上显示的列表ID。 然后,基本上,只想遍历所有页面。 这是我的代码:
from urllib import urlopen
from bs4 import BeautifulSoup
from selenium import webdriver
option=webdriver.ChromeOptions()
option.add_argument("--incognito")
driver=webdriver.Chrome(executable_path="C:/Users/chromedriver.exe",chrome_options=option)
first_url="https://www.airbnb.com/s/Los-Angeles--CA--United-States/select_homes?refinement_paths%5B%5D=%2Fselect_homes&place_id=ChIJE9on3F3HwoAR9AhGJW_fL-I&children=0&guests=1&query=Los%20Angeles%2C%20CA%2C%20United%20States&click_referer=t%3ASEE_ALL%7Csid%3Afcf33cf1-61b8-41d5-bef1-fbc5d0570810%7Cst%3AHOME_GROUPING_SELECT_HOMES&superhost=false&title_type=SELECT_GROUPING&allow_override%5B%5D=&s_tag=tm-X8bVo"
n=3
for i in range(1,n+1):
if (i==1):
driver.get(first_url)
print first_url
#HTML parse using BS
html =driver.page_source
soup=BeautifulSoup(html,"html.parser")
listings=soup.findAll("div",{"class":"_f21qs6"})
#print out all the listing_ids within a current page
for i in range(len(listings)):
only_id= listings[i]['id']
print(only_id[8:])
after_first_url=first_url+"§ion_offset=%d" % i
print after_first_url
driver.get(after_first_url)
#HTML parse using BS
html =driver.page_source
soup=BeautifulSoup(html,"html.parser")
listings=soup.findAll("div",{"class":"_f21qs6"})
#print out all the listing_ids within a current page
for i in range(len(listings)):
only_id= listings[i]['id']
print(only_id[8:])
如果您发现任何效率低下的代码,请谅解,因为我是新手。 我通过阅读和观看多个资源来编写此代码。 无论如何,我猜我有正确的代码,但是问题是,每次运行此代码,都会得到不同的结果。 这意味着它循环遍历页面,但是有时它仅给出特定数量的页面的结果。 例如,它循环page1但不给出任何相应的输出,而循环page2并给出结果,但不提供page3。 它是如此随机,以至于为某些页面提供了结果,但对于其他页面却没有。 最重要的是,有时它会按顺序循环page1,2,3,...,但有时会循环page1,然后移至最后一页(17),然后返回至page2。 我猜我的代码并不完美,因为它提供了不稳定的输出。 有没有人有类似的经验或有人可以帮助我解决问题所在? 谢谢。
请尝试以下方法
假设您在要解析的页面上,Selenium将源HTML存储在驱动程序的page_source属性中。 然后,您可以按以下方式将page_source加载到BeautifulSoup中:
In [8]: from bs4 import BeautifulSoup
In [9]: from selenium import webdriver
In [10]: driver = webdriver.Firefox()
In [11]: driver.get('http://news.ycombinator.com')
In [12]: html = driver.page_source
In [13]: soup = BeautifulSoup(html)
In [14]: for tag in soup.find_all('title'):
....: print tag.text
....:
....:
Hacker News
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.