一、注释
python初学者的第一次爬虫编写,流程如下:1)向网站发送请求 2)获取服务器响应信息 3)解析相应数据
#发送的地址 url='https://baidu.com' #发送请求 response=requests.get(url) #发送请求,获取响应 response.encoding='utf-8' #不同网页编码不同 #url是要下载的目标网页的url #伪装自己,尽量使服务器认为我是从浏览器访问的。可在request函数参数中写入headers timeout来使得服务器认为我是从浏览器访问的 #处理结果 #解析相应的数据 #是否保存'''
二、代码
import requests
from lxml import etree
import pprint
from bs4 import BeautifulSoup
import json
import openpyxl
import pandas as pd
#构造分页数字列表
#下载所有页面的html,用于后续数据处理
htmls=[]
def get_text(list):
return list[0]
all_datas=[]
for index in range(0,10):
url='https://movie.douban.com/top250?start='+str(index*25)
heads={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'}
#print('craw html:',url)
r=requests.get(url,headers=heads,timeout=3)
if r.status_code!=200:
raise Exception('error')
htmls=etree.HTML(r.text) #r.text就是html的数据
lis=htmls.xpath('//*[@id="content"]/div/div[1]/ol/li')
datas=[]
for li in lis:
title = get_text(li.xpath('./div/div[2]/div[1]/a/span[1]/text()')) #返回值是一个列表
rank=get_text(li.xpath('./div/div[1]/em/text()'))
rating_star=get_text(li.xpath('./div/div[2]/div[2]/div/span[2]/text()')).replace('rating','').replace('-t','')
comments=get_text(li.xpath('./div/div[2]/div[2]/div/span[4]/text()')).replace('人评价','')
#print(title,rank,rating_star,comments)
datas.append({'排名':rank,'电影名称':title,'评分':rating_star,'评论数':comments})
all_datas.extend(datas)
movie=pd.DataFrame(all_datas)
movie.to_excel(r'D:\movie.xlsx')