Python Web抓取解决方案

Python Web抓取解决方案,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,因此,我是python新手,正在尝试开发一个练习,在这个练习中,我从这个url上的列表中获取页码,这是一个各种已发表论文的列表 当我进入我想要抓取的页面的HTML元素时,我会检查该元素并找到匹配的HTML代码: <div class="src"> Foreign Affairs, Vol. 79, No. 4 (Jul. - Aug., 2000), pp. 53-63 </div> 我知道这段代码尚未完成,这是因为我不知道从这里走到哪里:/。有

因此,我是python新手,正在尝试开发一个练习,在这个练习中,我从这个url上的列表中获取页码,这是一个各种已发表论文的列表

当我进入我想要抓取的页面的HTML元素时,我会检查该元素并找到匹配的HTML代码:

<div class="src">
        Foreign Affairs, Vol. 79, No. 4 (Jul. - Aug., 2000), pp. 53-63
    </div>

我知道这段代码尚未完成,这是因为我不知道从这里走到哪里:/。有人能帮我吗?

如果我理解正确,您希望所有div中的页面都带有class=“src”

如果是,那么您需要执行以下操作:

import requests
import re
from bs4 import BeautifulSoup

url = "http://www.jstor.org/action/doAdvancedSearch?c4=AND&c5=AND&q2=&pt=&q1=nuclear&f3=all&f1=all&c3=AND&c6=AND&q6=&f4=all&q4=&f0=all&c2=AND&q3=&acc=off&c1=AND&isbn=&q0=china+&f6=all&la=&f2=all&ed=2001&q5=&f5=all&group=none&sd=2000"
r = requests.get(url)
soup = BeautifulSoup(r.content)
links = soup.find_all('div', {'class':'src'})
for link in links:
    pages = re.search('(pp.\s*\d*-\d*)', link.text)
    print pages.group(1)

注意,我已经使用regex来获取页码。对于不熟悉正则表达式的人来说,这可能听起来很奇怪,但我认为它比使用字符串操作(如
strip
split
更优雅。Tales pádua的另一种选择是:

此答案使用文档中的
class_uu
参数


如果要获取页码,并且所有内容都遵循上述格式(逗号分隔),则可以更改for循环以获取字符串的最后一个元素:

print link.text.split(",")[-1].strip()
这将产生:

pp. 53-63
pp. 1-23

你想要标签文本吗?比如:“外交事务,第79卷,第4期(2000年7月至8月),第53-63页”?提示:禁止使用内容。(d) 进行任何活动,例如使用自动下载或导出内容的计算机程序,通常称为网络机器人、蜘蛛、爬虫、漫游者或加速器,这些程序可能会干扰、中断JSTOR服务器或加重JSTOR服务器的负担。您是否真的尝试阅读文档?哦,这太完美了。非常感谢你!如果我只想打印该字符串的一段文字(比如“pp.53-63”),我将如何将其写入代码中?如果此信息始终位于字符串的末尾,则可以执行print link.text[-9:]编辑以包括一种很好的方式,使带有regex的页面比
text.rsplit(None,1)[1]
建议用于css类,即
div class=“foo bar”
Foreign Affairs, Vol. 79, No. 4 (Jul. - Aug., 2000), pp. 53-63
Other Book, Vol. 1, No. 1 (Jul. - Aug., 2000), pp. 1-23
print link.text.split(",")[-1].strip()
pp. 53-63
pp. 1-23