如何使用BeautifulSoup进入下一页?
How to go to the next page using BeautifulSoup?
我正在尝试从 this website 的所有 37 个网页中抓取数据。
我正在删除的网站不允许通过搜索栏转到下一页。
这是为下一个按钮编写的HTML。
<a href="javascript:void('Next')" class="next">
<svg viewBox="0 0 36 36" data-use="/cms/svg/site/icon_caret_right.36.svg">
(path tag and data)
</svg>
</a>
我知道这可以用 Selenium 来完成,但是有没有办法用 BeautifulSoup 来做到这一点?
有没有办法从下一页抓取数据?
因此您可以在此处使用 requests
转到每个页面。它通过 post 请求,然后使用查询页面参数取回连续页面的数据:
import requests
from bs4 import BeautifulSoup
import re
url = 'https://www.stfrancismedicalcenter.com/find-a-provider/'
for page in range(1, 38):
print(f'\t\tPage: {page}')
payload = {
'_m_': 'FindAPhysician',
'PhysicianSearch$HDR0$PhysicianName': '',
'PhysicianSearch$HDR0$SpecialtyIDs': '',
'PhysicianSearch$HDR0$Distance': '5',
'PhysicianSearch$HDR0$ZipCodeSearch': '',
'PhysicianSearch$HDR0$Keywords': '',
'PhysicianSearch$HDR0$LanguageIDs': '',
'PhysicianSearch$HDR0$Gender': '',
'PhysicianSearch$HDR0$InsuranceIDs': '',
'PhysicianSearch$HDR0$AffiliationIDs': '',
'PhysicianSearch$HDR0$NewPatientsOnly': '',
'PhysicianSearch$HDR0$InNetwork': '',
'PhysicianSearch$HDR0$HasPhoto': '',
'PhysicianSearch$FTR01$PagingID': str(page)}
response = requests.post(url, data=payload)
soup = BeautifulSoup(response.text, 'html.parser')
items = soup.find_all('li', {'class':re.compile("^half item-")})
for item in items:
itemName = item.find('div', {'class':'info'}).find_all('span')[0].text
itemType = item.find('div', {'class':'info'}).find_all('span')[1].text
phone = item.find('li', {'class':'inline-svg phone'}).text.strip()
address = item.find('address').text.strip().replace('\t','')
print(f'\n{itemName}\n{itemType}\n{phone}\n{address}\n')
我正在尝试从 this website 的所有 37 个网页中抓取数据。
我正在删除的网站不允许通过搜索栏转到下一页。
这是为下一个按钮编写的HTML。
<a href="javascript:void('Next')" class="next">
<svg viewBox="0 0 36 36" data-use="/cms/svg/site/icon_caret_right.36.svg">
(path tag and data)
</svg>
</a>
我知道这可以用 Selenium 来完成,但是有没有办法用 BeautifulSoup 来做到这一点?
有没有办法从下一页抓取数据?
因此您可以在此处使用 requests
转到每个页面。它通过 post 请求,然后使用查询页面参数取回连续页面的数据:
import requests
from bs4 import BeautifulSoup
import re
url = 'https://www.stfrancismedicalcenter.com/find-a-provider/'
for page in range(1, 38):
print(f'\t\tPage: {page}')
payload = {
'_m_': 'FindAPhysician',
'PhysicianSearch$HDR0$PhysicianName': '',
'PhysicianSearch$HDR0$SpecialtyIDs': '',
'PhysicianSearch$HDR0$Distance': '5',
'PhysicianSearch$HDR0$ZipCodeSearch': '',
'PhysicianSearch$HDR0$Keywords': '',
'PhysicianSearch$HDR0$LanguageIDs': '',
'PhysicianSearch$HDR0$Gender': '',
'PhysicianSearch$HDR0$InsuranceIDs': '',
'PhysicianSearch$HDR0$AffiliationIDs': '',
'PhysicianSearch$HDR0$NewPatientsOnly': '',
'PhysicianSearch$HDR0$InNetwork': '',
'PhysicianSearch$HDR0$HasPhoto': '',
'PhysicianSearch$FTR01$PagingID': str(page)}
response = requests.post(url, data=payload)
soup = BeautifulSoup(response.text, 'html.parser')
items = soup.find_all('li', {'class':re.compile("^half item-")})
for item in items:
itemName = item.find('div', {'class':'info'}).find_all('span')[0].text
itemType = item.find('div', {'class':'info'}).find_all('span')[1].text
phone = item.find('li', {'class':'inline-svg phone'}).text.strip()
address = item.find('address').text.strip().replace('\t','')
print(f'\n{itemName}\n{itemType}\n{phone}\n{address}\n')