嗨,我正试图从一个漫画网站的网页刮一些数据。
感谢chitown88在这个article中的回答,我已经设法使用美丽的汤提取了一些细节,以及我提取的ul标签下的一些li值,但没有按照我想要的方式组织。
下面是我一直在使用的代码:
import requests
import pandas as pd
from bs4 import BeautifulSoup
url = 'https://www.bedetheque.com/serie-63733-BD-Champignac.html'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'}
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')
lists = soup.find_all('div', class_="album-main")
data = []
for each in lists:
extra = each.find('ul', {'class':'infos'})
extra_lists = extra.find_all('li')
row = {
'Extra': [x.text.replace('\r', '').replace('\n', '').replace('\xa0', '') for x in extra_lists]
}
data.append(row)
df1 = pd.DataFrame(data)
df = pd.DataFrame([pd.Series(x) for x in df1.Extra])
df.columns = ['info_{}'.format(x+1) for x in df.columns]
df.to_csv('infos_albums.csv', index=False)
这是我得到:here is what I got
这是我想要的here is what I would like to have
我有很多漫画要刮,所有的页面都很相似,但有些小的特殊性避免我使用xpath方法。
所以如果有人能帮助我或者有更好的想法,那将是有帮助的(也许把所有的li放在某个变量中??)
谢谢,祝你有愉快的一天
2条答案
按热度按时间eufgjt7s1#
下面是一个带有 regex(* 基于您的代码 *)的命题:
输出:
laawzig22#
你可以用一种“通用”的方式来实现你的目标,使用
stripped_strings
,其中如果label
包含:
,则label
是list
中的第一个索引,否则你必须使用find_previous('label')
:示例
输出