python3爬虫豆瓣top250电影(并保存到mysql数据库)

所用到的模块(需要提前安装好):

requests、BeautifulSoup、lxml、mysql.connector(或者pymysql也可以,如果不想插入到数据库,只需要将里边相关的代码删除)

(代码下边将贴出本文beautifulsoup的使用)

代码:

import requests
from bs4 import BeautifulSoup
import mysql.connector


def get_pages_link():
    # 插入到数据库
    conn = mysql.connector.connect(user='root', password='root', database='test')
    cursor = conn.cursor()

    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36',
        'Connection': 'keep-alive'
    }

    for item in range(0, 250, 25):
        url = "https://movie.douban.com/top250?start={}".format(item)
        web_data = requests.get(url, headers=header)
        soup = BeautifulSoup(web_data.content, 'lxml')
        for movie in soup.select('#wrapper li'):

            #href = movie.select('.hd > a')[0]  # 链接
            href=movie.find('a')["href"]
            name = movie.select('.hd > a > span')[0].text  # 片名
            star = movie.select('.rating_num')[0].text  # 评分
            people = movie.select('.star > span')[3].text  # 评价人数
            try:
                quote = movie.select('.inq')[0].text
            except:
                print('没有quote哦')
                quote = None
            data = {
                # 'url': href,
                '评分': star,
                '片名': name,
                '名言': quote,
                '评价人数': people
            }
            sql = 'insert into doubantop250(score,name,quote,people) values (%f,"%s","%s","%s")' % (
                float(star), name, quote, people)
            cursor.execute(sql)
            conn.commit()

            print(data)
            # print(movie)
        print('\n' + '-' * 50 + '\n')
    # 关闭数据库
    cursor.close()
    conn.close


if __name__ == '__main__':
    get_pages_link()

因为这个爬虫是跟着微信里的一篇文章学的,所以设置为转载~

里边的加入到mysql数据库是自己边写边学的,然而下边这行代码困扰了我一个上午!

sql = 'insert into doubantop250(score,name,quote,people) values (%f,%s,%s,%s)' % (
    float(star), name, quote, people)

本来这事很正常的插入数据库的操作,但一直报错,因为字符串是汉字类型的,自己写小demo是可以插入字母、数字的,但是一到汉字这就报错,,后来查了好多内容才知%s需要加引号。。。。

sql = 'insert into doubantop250(score,name,quote,people) values (%f,"%s","%s","%s")' % (
                float(star), name, quote, people)

**********我是分割线**********

下边讲一下从代码里学到的东西:

soup = BeautifulSoup(web_data.content, 'lxml')

将html内容解析为soup文档

soup.select('#wrapper li')

获取文档里边id是wrapper,标签为li的所有内容

href=movie.find('a')["href"]

获取标签为 a 里边的 href(对应的html里的:

 name = movie.select('.hd > a > span')[0].text

获取标签为a 里 标签为span的内容,里边有三个span,name是对应的第一个,所以下标为0

更多关于beautifulsoup的使用可以查看对应的官方文档

本文学习参考的文章还有这篇文章使用BeautifulSoup和lxml解析网页中的元素(一)

你可能感兴趣的:(python)