用于抓取特定链接的CSS选择器
我刚开始学习Python,正在做一个抓取数据的项目。我使用Firebug工具来复制需要链接的CSS路径。我想从http://kiascenehai.pk/网站的“即将发生的活动”标签下收集链接,但这只是为了学习如何获取特定的链接。
我在寻找解决这个问题的方法,同时也希望能得到一些建议,关于如何使用CSS选择器来提取特定的链接。
from bs4 import BeautifulSoup
import requests
url = "http://kiascenehai.pk/"
r = requests.get(url)
data = r.text
soup = BeautifulSoup(data)
for link in soup.select("html body div.body-outer-wrapper div.body-wrapper.boxed-mode div.main- outer-wrapper.mt30 div.main-wrapper.container div.row.row-wrapper div.page-wrapper.twelve.columns.b0 div.row div.page-wrapper.twelve.columns div.row div.eight.columns.b0 div.content.clearfix section#main-content div.row div.six.columns div.small-post-wrapper div.small-post-content h2.small-post-title a"):
print link.get('href')
2 个回答
0
我是KiaSceneHai.pk的联合创始人;请不要抓取我们的网站,收集这些数据需要很多努力。我们提供API接口供大家使用,如果想要访问,可以通过联系表单来申请,谢谢!
0
首先,这个页面需要你选择一个城市(这个选择会保存在一个小文件里,叫做cookie)。你可以使用一个叫做Session对象来处理这个问题:
s = requests.Session()
s.post('http://kiascenehai.pk/select_city/submit_city', data={'city': 'Lahore'})
response = s.get('http://kiascenehai.pk/')
这样一来,获取到的响应就是真正的页面内容,而不是被重定向到城市选择页面了。
接下来,保持你的CSS选择器尽量小,不要过大。在这个页面上,内容不多,因为它使用了网格布局,所以我们首先需要聚焦到正确的行:
upcoming_events_header = soup.find('div', class_='featured-event')
upcoming_events_row = upcoming_events_header.find_next(class_='row')
for link in upcoming_events_row.select('h2 a[href]'):
print link['href']