我正在尝试使用requests模块构建一个网络爬虫,基本上我想要它做的是转到一个网页,获取所有的href,然后将它们写入一个文本文件。
到目前为止,我的代码如下所示:
def getLinks(url):
response = requests.get(url).text
soup = BeautifulSoup(response,"html.parser")
for link in soup.findAll("a"):
print("Link:"+str(link.get("href")))这在一些网站上有效,但我尝试在href上使用的不是像"www.google.com“这样的完整域名,而是like...paths到一个重定向到链接的目录?
看起来像这样:
href="/out/101"如果我试着把它写到一个文件中,它看起来像这样
1. /out/101
2. /out/102
3. /out/103
4. /out/104这并不是我真正想要的。
那么我该如何从这些链接中获取域名呢?
发布于 2016-01-05 05:02:12
这意味着URL是相对于当前的。要获取完整的URL,请使用urljoin()
from urlparse import urljoin
for link in soup.findAll("a"):
full_url = urljoin(url, link.get("href"))
print("Link:" + full_url)发布于 2016-01-05 05:07:48
尝试下面的代码。如果您知道该网站的base url,那么您可以从中提取所有其他urls。整个网络抓取代码都在这里WebScrape
import requests
import lxml.html
from bs4 import BeautifulSoup
def extractLinks(url, base):
'''
Return links from the website
:param url: Pass the url
:param base: this is the base links
:return: list of links
'''
links = [] #it will contain all the links from the website
try:
r = requests.get(url)
except:
return []
obj = lxml.html.fromstring(r.text)
potential_links = obj.xpath("//a/@href")
links.append(r.url)
#print potential_links
for link in potential_links:
if base in link:
links.append(link)
else:
if link.startswith("http"):
links.append(link)
elif base.endswith("/"):
if link.startswith("/"):
link = link.lstrip("/")
link = base + link
else:
link = base + link
links.append(link)
return links
extractLinks('http://data-interview.enigmalabs.org/companies/',
'http://data-interview.enigmalabs.org/')https://stackoverflow.com/questions/34599760
复制相似问题