如何从URL抓取整个文本?

时间:2019-07-05 16:52:02

标签: html python-3.x web-scraping beautifulsoup

我有一个从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。

2 个答案:

答案 0 :(得分:1)

您希望抓取的“报价”页面上有一些不完整/悬空的HTML标签。如果您不了解所使用的解析器,可能很难解析。要获取有关它们的提示,请参见this page

现在回到代码,为方便起见,我使用了lxml解析器。继续前进,如果您观察到那些“引用”页面中任何一个的页面来源,那么您将看到希望剪贴的大部分文本都出现在以下标记之一中:{h3,{ {1}},pul}。另外,请注意,每个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)

参考:

  1. CSS Attribute selectors
  2. CSS selectors
  3. Session object
  4. HTTP Sessions