python - 创建通过多个 read_html 链接循环的数据框
问题描述
我是 python 新手,我正在尝试从网站的多个页面中抓取一个表格。
在阅读了多个网站并观看了视频之后,我设法编写了一个能够抓取单个页面并将其保存到 Excel 的代码。分页的 url 是简单地更改 url 末尾的 page=x 值。我尝试循环浏览多个页面并创建数据框但失败了。
单页抓取
import pandas as pd
import requests
from bs4 import BeautifulSoup
from tabulate import tabulate
urlbase = "https://www.olx.in/coimbatore/?&page=1"
res = requests.get(urlbase)
soup = BeautifulSoup(res.content,'lxml')
table = soup.find('table', id="offers_table")
df = pd.read_html(str(table), header=1)
df[0].rename(index=str, columns={"Unnamed: 0": "Full Desc", "Unnamed: 2":
"Detail", "Unnamed: 3": "Price", "Unnamed: 4": "Time"}, inplace = True)
df[0].dropna(thresh=3).to_excel('new.xlsx', sheet_name='Page_2', columns=
['Detail','Price','Time'], index = False)
抓取多个页面
import pandas as pd
import requests
from bs4 import BeautifulSoup
from tabulate import tabulate
urlbase = "https://www.olx.in/coimbatore/?&page="
for x in range (4)[1:]:
res = requests.get(urlbase + str(x))
然后通过组合从每个页面创建的多个数据框来创建一个数据框。我不知道如何在一个循环中创建多个数据框并将它们组合在一起。
解决方案
你快到了,你可以使用:
frames = []
for x in range (4):
res = requests.get(urlbase + str(x))
soup = BeautifulSoup(res.content,'lxml')
table = soup.find('table', id="offers_table")
df = pd.read_html(str(table), header=1)
df[0].rename(index=str, columns={"Unnamed: 0": "Full Desc", "Unnamed: 2":
"Detail", "Unnamed: 3": "Price", "Unnamed: 4": "Time"}, inplace = True)
frames.append(df[0].dropna(thresh=3))
res = pd.concat(frames)
res.to_excel('new.xlsx', sheet_name='Page_2', columns= ['Detail','Price','Time'], index = False)
推荐阅读
- python - Django 自动注销和页面重定向
- php - Codeigniter 3,适用于“http”但不适用于“https”
- python - 检查目录中是否有 .format 文件
- powershell - 过滤列大于或等于数字的 CSV
- python - python中的opencv形状检测
- python - 确保 str 是 int 的最快方法是什么?
- javascript - 在 js.match(/(^|\s)here-\S+/g) 中使用函数中的参数
- arrays - 嵌套数组上的 Ruby each 返回不一致的结果
- go - 使用 StdoutPipe 时将 Stdout 保存到变量
- oop - 字段覆盖或构造函数参数哪个更好