【发布时间】:2020-05-13 07:00:01
【问题描述】:
我正在尝试根据以下说明编写脚本:
将所有 URL 抓取到站点地图索引中,并将信息存储到 Excel 文件中,为每个 URL 指定相应的状态代码。
我设法抓取所有 URL 并将它们存储到一个文件中,顺便说一下,我仍在努力寻找获取状态代码的方法。
import requests
from bs4 import BeautifulSoup
url = 'https://www.example-domain.it/sitemap_index.xml'
page = requests.get(url)
print('Loaded page with: %s' % page)
sitemap_index = BeautifulSoup(page.content, 'html.parser')
print('Created %s object' % type(sitemap_index))
urls = [element.text for element in sitemap_index.findAll('loc')]
print(urls)
def extract_links(url):
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
links = [element.text for element in soup.findAll('loc')]
return links
sitemap_urls = []
for url in urls:
links = extract_links(url)
r = requests.get(url)
code = r.status_code
sitemap_urls += links
sitemap_urls += code
print('Found {:,} URLs in the sitemap'.format(len(sitemap_urls)))
import pandas as pd
df = pd.DataFrame(sitemap_urls)
df.to_excel("Export_link.xlsx")
谁能帮我修复这个脚本?
我收到此错误:
TypeError: 'int' object is not iterable
问题出在以下几行:
sitemap_urls = []
for url in urls:
links = extract_links(url)
r = requests.get(url)
code = r.status_code
sitemap_urls += links
sitemap_urls += code
如果我只是写:
sitemap_urls = []
for url in urls:
links = extract_links(url)
sitemap_urls += links
脚本正确导出了站点地图索引中的所有 URL,但我必须更进一步:我想为站点地图中包含的每个 URL 获取相应的状态代码。
我怎样才能安排这个迭代来实现它?
【问题讨论】:
-
运行此程序时是否收到任何错误或任何输出?
-
嗨,马可!是的,我收到以下错误:TypeError: 'int' object is not iterable
-
有了完整的输出,我可以肯定,但你可能在这里有一个错误:urls = [element.text for element in sitemap_index.findAll('loc')] .. 因为看起来像不包含您期望的内容,从错误来看,它看起来像 url 它包含一个数字 e 不是您期望的 url 列表
-
欢迎来到 Stack Overflow!请edit您的帖子包含您对问题的任何其他信息。避免在 cmets 中添加它,因为它们更难阅读并且更容易删除。帖子的编辑按钮就在帖子标签的下方。
-
我用您要求的信息编辑了帖子:)
标签: python web-scraping beautifulsoup xml-sitemap