我最近接触了网络抓取,并尝试通过网络抓取各种页面。目前,我正在尝试抓取以下网站-http: //www.pizzahut.com.cn/StoreList
到目前为止,我已经使用硒来获取经度和纬度。但是,我的代码现在仅提取第一页。我知道有一个动态的网络抓取功能,可以执行javascript并加载不同的页面,但是很难找到合适的解决方案。我想知道是否有办法访问其他49个页面,因为当我单击下一页时,URL不会因为设置而改变,因此我不能每次都重复访问另一个URL
以下是我到目前为止的代码:
import os
import requests
import csv
import sys
import time
from bs4 import BeautifulSoup
page = requests.get('http://www.pizzahut.com.cn/StoreList')
soup = BeautifulSoup(page.text, 'html.parser')
for row in soup.find_all('div',class_='re_RNew'):
name = row.find('p',class_='re_NameNew').string
info = row.find('input').get('value')
location = info.split('|')
location_data = location[0].split(',')
longitude = location_data[0]
latitude = location_data[1]
print(longitude, latitude)
非常感谢您的帮助。非常感激
在浏览器中打开开发者工具(谷歌浏览器是Ctrl+ Shift+ I)。现在,转到XHR
选项卡内的Network
选项卡。
之后,单击下一页按钮。您将看到以下文件。
点击该文件。在常规块中,您将看到我们需要的这两件事。
向下滚动,在“ 表单数据”选项卡中,您可以看到以下三个变量:
在这里,您可以看到更改的值pageIndex
将提供所有需要的页面。
现在,我们已经获得了所有必需的数据,我们可以使用上述数据POST
为URL 写一个方法http://www.pizzahut.com.cn/StoreList/Index
。
我将向您展示刮擦前2页的代码,您可以通过更改刮擦任意数量的页面range()
。
for page_no in range(1, 3):
data = {
'pageIndex': page_no,
'pageSize': 10,
'keyword': '输入餐厅地址或餐厅名称'
}
page = requests.post('http://www.pizzahut.com.cn/StoreList/Index', data=data)
soup = BeautifulSoup(page.text, 'html.parser')
print('PAGE', page_no)
for row in soup.find_all('div',class_='re_RNew'):
name = row.find('p',class_='re_NameNew').string
info = row.find('input').get('value')
location = info.split('|')
location_data = location[0].split(',')
longitude = location_data[0]
latitude = location_data[1]
print(longitude, latitude)
输出:
PAGE 1
31.085877 121.399176
31.271117 121.587577
31.098122 121.413396
31.331458 121.440183
31.094581 121.503654
31.270737000 121.481178000
31.138214 121.386943
30.915685 121.482079
31.279029 121.529255
31.168283 121.283322
PAGE 2
31.388674 121.35918
31.231706 121.472644
31.094857 121.219961
31.228564 121.516609
31.235717 121.478692
31.288498 121.521882
31.155139 121.428885
31.235249 121.474639
30.728829 121.341429
31.260372 121.343066
注意:您可以通过更改pageSize
(当前值为10)的值来更改每页的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句