我在网络抓取领域是一个新手,我以前使用代码从包含多个页面的网站中提取网址,然后将其保存在txt文件中。我想将其应用于新网站,但该网站只有一个页面,但带有“显示更多”按钮。
这是网页:http : //sdg.iisd.org/news/
这是我的代码:
import requests
from bs4 import BeautifulSoup
import time
import pandas as pd
links = []
for i in range(#221):
url = 'http://sdg.iisd.org/news/' #+ str(i) <-- for webpage with many pages
response = requests.get(url, headers={'User-agent': 'Mozilla/5.0'})
if response.ok:
print('Page: ' + str(i))
soup = BeautifulSoup(response.text,'lxml')
div = soup.findAll('article')
for article in div:
a = article.find('a')
link = a['href']
links.append('https://sdg.iisd.org/news' + link)
print(len(links))
with open('urls.txt', 'w') as file:
for link in links:
file.write(link + '\n')
有人建议使用Selenium,但我找不到我拥有的类似应用程序的示例。您是否知道我可以使用什么和更改代码来获取页面的所有链接?
如果您记录了浏览器的网络流量,则可以看到按下该Show more
按钮可以http://sdg.iisd.org/wp-admin/admin-ajax.php
通过HTTP POST发出XHR请求,并且响应为HTML。您也可以从浏览器的开发工具中复制POST有效负载。在有效负载字典中使用pageNumber
和ppp
键值对data
来获得不同的文章:
def main():
import requests
from bs4 import BeautifulSoup as Soup
from operator import itemgetter
url = "http://sdg.iisd.org/wp-admin/admin-ajax.php"
data = {
"template": "load_more",
"post_type": "news",
"sdgs": "",
"issues": "",
"globalpartnership": "",
"actors": "",
"actions": "",
"regions": "",
"behaviour": "exact",
"sort_by": "DESC",
"pageNumber": "1",
"ppp": "12",
"action": "more_post_ajax",
"author": ""
}
response = requests.post(url, data=data)
response.raise_for_status()
soup = Soup(response.content, "html.parser")
article_urls = list(map(itemgetter("href"), soup.select("article > a")))
print(article_urls)
return 0
if __name__ == "__main__":
import sys
sys.exit(main())
输出:
['http://sdg.iisd.org/news/wef-event-explores-ways-to-fix-international-trade-system/', 'http://sdg.iisd.org/news/wto-members-resume-negotiations-on-fisheries-subsidies/', 'http://sdg.iisd.org/news/informal-ministerial-highlights-role-of-trade-in-promoting-covid-19-recovery/', 'http://sdg.iisd.org/news/wto-imf-project-uneven-covid-19-recovery-across-and-within-countries/', 'http://sdg.iisd.org/news/53-wto-members-commit-to-ease-restrictions-on-humanitarian-food-aid/', 'http://sdg.iisd.org/news/development-goals-can-work-even-amid-crisis-but-we-need-to-measure-better/', 'http://sdg.iisd.org/news/unctad-partners-launch-tool-to-identify-exchange-traded-funds-with-sdg-alignment/', 'http://sdg.iisd.org/news/tool-helps-measure-quality-of-stakeholder-engagement-in-sdgs/', 'http://sdg.iisd.org/news/unctad-reveals-economic-slowdown-before-covid-19-provides-key-data-on-rcep-agreement/', 'http://sdg.iisd.org/news/unep-report-identifies-top-actions-to-minimize-adverse-impacts-of-pesticides-fertilizers/', 'http://sdg.iisd.org/news/regions-to-hold-sustainable-development-forums-ahead-of-2021-hlpf/', 'http://sdg.iisd.org/news/ndc-partnership-reflects-on-milestone-year-for-climate-ambition/']
>>>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句