我有一个热门文章的网页,我想抓取每个引用的网页的超链接和它显示的文章的标题。
我的脚本所需的输出是一个CSV文件,它在一行中列出每个标题和文章内容。因此,如果此网页上有50篇文章,我想要一个包含50行和100个数据点的文件。
我的问题是文章标题及其超链接包含在一个SVG容器中,这让我失望。我之前使用过BeautifulSoup进行网页抓取,但我不确定如何选择每篇文章的标题和超链接。非常感谢任何和所有帮助。
import requests
from bs4 import BeautifulSoup
import re
res = requests.get('http://fundersandfounders.com/what-internet-thinks-based-on-media/')
res.raise_for_status()
playFile = open('top_articles.html', 'wb')
for chunk in res.iter_content(100000):
playFile.write(chunk)
f = open('top_articles.html')
soup = BeautifulSoup(f, 'html.parser')
links = soup.select('p') #i know this is where i'm messing up, but i'm not sure which selector to actually utilize so I'm using the paragraph selector as a place-holder
print(links)
我知道这实际上是一个两步项目:我的脚本的当前版本不会遍历所有超链接的列表,这些超链接的实际内容我将要抓取。这是我可以自己轻松执行的第二步,但是如果有人想写这一点,那就是对你的称赞。
答案 0 :(得分:1)
您应该分两步完成:
val nums1 = BitSet(3, 2).toBitMask
val nums2 = BitSet(3, 2, 0).toBitMask
svg
页面,使用svg
解析并提取"起泡" 实现:
BeautifulSoup
打印文章标题和资源:
from urllib.parse import urljoin # Python3
import requests
from bs4 import BeautifulSoup
base_url = 'http://fundersandfounders.com/what-internet-thinks-based-on-media/'
with requests.Session() as session:
# extract the link to svg
res = session.get(base_url)
soup = BeautifulSoup(res.content, 'html.parser')
svg = soup.select_one("object.svg-content")
svg_link = urljoin(base_url, svg["data"])
# download and parse svg
res = session.get(svg_link)
soup = BeautifulSoup(res.content, 'html.parser')
for article in soup.select("#bubbles .bgroup"):
title, resource = [item.get_text(strip=True, separator=" ") for item in article.select("a text")]
print("Title: '%s'; Resource: '%s'." % (title, resource))