使用Beautiful Soup + Requests时,find_all()找不到任何结果

时间:2015-08-21 15:00:03

标签: python web-scraping beautifulsoup html-parsing python-requests

我第一次尝试使用BeautifulSoup和Requests,并试图通过从新闻网站抓取一些信息来学习。该项目的目的是能够从终端阅读新闻亮点,因此我需要有效地抓取和解析文章标题和文章正文。

我仍然处于获取标题的阶段,但是当我尝试使用find_all()函数时,我根本就没有存储任何数据。以下是我的代码:

from bs4 import BeautifulSoup
from time import strftime
import requests

date = strftime("%Y/%m/%d")

url = "http://www.thedailybeast.com/cheat-sheets/" + date + "/cheat-sheet.html"

result = requests.get(url)
c = result.content
soup = BeautifulSoup(c, "lxml")

titles = soup.find_all('h1 class="title multiline"')

print titles

有什么想法?如果有人也有任何建议/提示来改善我现在拥有的东西或我采取的方法,我总是希望变得更好所以请告诉我们!

干杯

2 个答案:

答案 0 :(得分:2)

你把所有内容放在引号中:

titles = soup.find_all('h1 class="title multiline"')

使BeautifulSoup搜索h1 class="title multiline"元素。

相反,请使用:

titles = soup.find_all("h1", class_="title multiline")

或者,使用CSS selector

titles = soup.select("h1.title.multiline")

实际上,由于页面的动态特性,要获得所有标题,您必须采用不同的方法:

import json

results = json.loads(soup.find('div', {'data-pageraillist': True})['data-pageraillist'])
for result in results:
    print result["title"]

打印:

Hillary Email ‘Born Classified’
North Korean Internet Goes Down
Kid-Porn Cops Go to Gene Simmons’s Home
Baylor Player Convicted of Rape After Coverup
U.S. Calls In Aussie Wildfire Experts
Markets’ 2015 Gains Wiped Out
Black Lives Matters Unveils Platform
Sheriff Won’t Push Jenner Crash Charge 
Tear Gas Used on Migrants Near Macedonia
Franzen Considered Adopting Iraqi Orphan

答案 1 :(得分:1)

你非常接近,但find_all只搜索标签,它不像通用搜索功能。

因此,如果您想按标签和属性(如类)进行过滤,请执行以下操作:

soup.find_all('h1', {'class' : 'multiline'})