table = soup.find('table', {'class': 'quote-info'})为什么报错
时间: 2023-10-02 17:08:06 浏览: 36
这个错误可能是因为`BeautifulSoup`没有找到`table`标签或者`class`属性为`quote-info`的`table`标签不存在。
你可以先检查一下网页的HTML源代码,确保`table`标签存在且具有`class`属性为`quote-info`。如果存在,可以尝试使用其他属性或标签名来查找`table`标签。如果不存在,那么你就无法找到这个`table`标签,需要修改代码逻辑或者更换网页源代码来解决问题。
相关问题
解释代码,说明爬虫实现过程:# -- coding:utf8 -- import pymysql import requests import re import pandas as pd from bs4 import BeautifulSoup def get_movies(start): url = "https://movie.douban.com/top250?start=%d&filter=" % start lists = [] headers = { "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"} html = requests.get(url,headers=headers) soup = BeautifulSoup(html.content, "html.parser") items = soup.find("ol", class_="grid_view").find_all("li") for i in items: movie = {} movie["rank"] = i.find("em").text movie["link"] = i.find("div","pic").find("a").get("href") movie["mdirecter"]=re.findall(re.compile(r'<p class="">(.*?)</p>',re.S),str(i))[0].replace("...<br/>","").replace("\n ","") movie["name"] = i.find("span", "title").text movie["score"] = i.find("span", "rating_num").text movie["quote"] = i.find("span", "inq").text if(i.find("span", "inq")) else "" lists.append(movie) return lists if name == "main": db = pymysql.connect(host="localhost",user="root",password="123456",db="maoyan",charset="utf8",port = 3306) cursor = db.cursor() cursor.execute("DROP TABLE IF EXISTS movies") createTab = """CREATE TABLE movies( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20) NOT NULL, link VARCHAR(50) NOT NULL, score VARCHAR(4) NOT NULL, descr VARCHAR(50), directer VARCHAR(100), timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP )""" cursor.execute(createTab) #采集到的数据循环插入数据中 start = 0 while (start < 250): lists = get_movies(start) for i in lists: sql = "INSERT INTO movies(name,link,score,descr,directer) VALUES(%s,%s,%s,%s,%s)" try: cursor.execute(sql, (i["name"], i["link"] , i["score"], i["quote"],i["mdirecter"])) db.commit() print(i["name"]+"...成功插入到数据库中") except: db.rollback() start += 25 db.close() cursor = db.cursor() conn = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='maoyan', charset='utf8mb4') cursor = conn.cursor() #输出评分top10 sql = "select * from movies limit 10" db = pd.read_sql(sql, conn) df = db.sort_values(by="score", ascending=False) print(df[['name', 'score']])
这段代码是一个简单的Python爬虫程序,用于爬取豆瓣电影Top250的数据,并将数据存储到MySQL数据库中。程序使用了第三方库requests和BeautifulSoup,其中requests用于向目标网站发送HTTP请求,BeautifulSoup用于解析HTML页面内容。程序主要分为两个部分,第一部分是get_movies函数,用于从豆瓣电影Top250页面中获取电影信息,包括电影名称、电影链接、评分、电影描述和导演等信息,并将这些信息存储到列表中返回。第二部分是主函数,主要用于将获取到的电影信息插入到MySQL数据库中,并输出评分Top10的电影信息。
具体实现过程如下:
1. 导入需要的库,包括pymysql、requests、re、pandas和BeautifulSoup。
2. 定义get_movies函数,该函数使用requests库向豆瓣电影Top250页面发送HTTP请求,然后使用BeautifulSoup解析HTML页面内容,获取电影信息,并将这些信息存储到列表中返回。
3. 在主函数中,使用pymysql库连接MySQL数据库,并定义一个游标对象cursor,用于操作数据库。
4. 创建movies表,用于存储豆瓣电影Top250的数据。
5. 采集数据并插入到数据库中,主要是使用get_movies函数获取电影信息,然后使用INSERT语句将这些信息插入到movies表中。
6. 输出评分Top10的电影信息,主要是使用SELECT语句从movies表中查询数据,并使用pandas库进行排序和输出。
最后,程序关闭数据库连接,完成数据采集和存储的任务。
访问古诗文网(https://so.gushiwen.cn/mingjus/),使用BeautifulSoup采集所有名句页数据,爬取每个名句及其出处,并把爬取到的数据保存到MySQL数据库中。
访问古诗文网(https://so.gushiwen.cn/mingjus/)并使用Python的BeautifulSoup库来爬取数据是一个常见的网络抓取任务。以下是大概步骤:
1. **安装必要的库**:
首先需要安装`requests`用于发送HTTP请求获取网页内容,`beautifulsoup4`处理HTML解析,以及`mysql-connector-python`连接MySQL数据库。
```bash
pip install requests beautifulsoup4 mysql-connector-python
```
2. **获取网页内容**:
使用`requests.get()`获取名句页面的HTML内容,然后通过`.text`属性得到文本。
```python
import requests
url = "https://so.gushiwen.cn/mingjus/"
response = requests.get(url)
html_content = response.text
```
3. **解析HTML**:
使用BeautifulSoup解析HTML,找到包含名句和出处信息的部分。这通常涉及到选择特定的CSS或XPath表达式。
```python
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_content, 'lxml')
quotes = soup.find_all('div', class_='quote') # 假设名句信息在class为'quote'的div标签内
```
4. **提取数据**:
循环遍历`quotes`列表,从每个元素中提取出名句和出处。可能需要根据实际的HTML结构调整这个过程。
```python
data = []
for quote in quotes:
title = quote.find('h4').text.strip() # 名句
author = quote.find('span', class_='author').text.strip() # 出处
data.append((title, author))
```
5. **连接MySQL数据库**:
创建一个到MySQL的连接,并使用`cursor.execute()`将数据插入表中。
```python
import mysql.connector
db_config = {
'host': 'your_host',
'user': 'your_user',
'password': 'your_password',
'database': 'your_database'
}
cnx = mysql.connector.connect(**db_config)
cursor = cnx.cursor()
create_table_query = """
CREATE TABLE IF NOT EXISTS gushiwen_quotes (
id INT AUTO_INCREMENT PRIMARY KEY,
title TEXT,
author TEXT
);
"""
cursor.execute(create_table_query)
# 插入数据
insert_data_query = "INSERT INTO gushiwen_quotes (title, author) VALUES (%s, %s)"
cursor.executemany(insert_data_query, data)
cnx.commit()
cursor.close()
cnx.close()
```
6. **运行脚本**:
将上述代码组合成一个完整的Python脚本,确保每次运行前检查数据库是否已存在所需表,如果没有则创建。
注意:在实际操作中,务必遵守网站的robots.txt协议,尊重版权,并确保您的活动符合法律要求。
阅读全文