我有一个从this page收集的URL列表,这些URL基本上只是人们的引号,我想将引号保存在每个不同URL的单独文件中。
要获取网址列表,我使用了:
import bs4
from urllib.request import Request,urlopen as uReq
from bs4 import BeautifulSoup as soup
import re
#define url of interest
my_url = 'http://archive.ontheissues.org/Free_Trade.htm'
# set up known browser user agent for the request to bypass HTMLError
req=Request(my_url,headers={'User-Agent': 'Mozilla/5.0'})
#opening up connection, grabbing the page
uClient = uReq(req)
page_html = uClient.read()
uClient.close()
#html is jumbled at the moment, so call html using soup function
soup = soup(page_html, "html.parser")
# Test: print title of page
soup.title
tags = soup.findAll("a" , href=re.compile("javascript:pop"))
print(tags)
# get list of all URLS
for links in tags:
link = links.get('href')
if "java" in link:
print("http://archive.ontheissues.org" + link[18:len(link)-3])
我将如何从每个链接中提取内容(包括文本,项目符号,段落),然后将其保存到单独的文件中? 另外,我不希望那些非引号的内容,例如那些页面中的其他URL。
答案 0 :(得分:1)
您希望抓取的“报价”页面上有一些不完整/悬空的HTML标签。如果您不了解所使用的解析器,可能很难解析。要获取有关它们的提示,请参见this page。
现在回到代码,为方便起见,我使用了lxml
解析器。继续前进,如果您观察到那些“引用”页面中任何一个的页面来源,那么您将看到希望剪贴的大部分文本都出现在以下标记之一中:{h3
,{ {1}},p
,ul
}。另外,请注意,每个ol
标签旁边都有一个字符串。可以使用h3
捕获此字符串。
现在已经设置了条件,让我们继续执行代码。
.next_sibling
答案 1 :(得分:1)
这些是有帮助的两个方面。
您可以使用Session
对象来提高重用连接的效率。
您可以使用bs4 4.7.1压缩您的打开代码,以获取正确的url,如下所示,其中我使用attribute = value css选择器来限制包含href
的{{1}} 。 *是javascript:pop
运算符。
contains
然后添加[href*="javascript:pop"]
的伪选择器,以进一步限制其innerText中包含单词:contains
的url。这样可以将匹配的元素列表精确地精确到所需的那些元素。
quote
:contains(quote)
参考: