Python爬虫入门级爬取静态网站

Python爬虫入门级爬取静态网站

一、导入库
import requests(获取网页)
import urllib.request,urllib.error (制定URL,获取网页数据)
import re (正则表达式匹配)
from bs4 import BeautifulSoup(网页解析方法)
import xlwt(进行excel操作)
from lxml import etree(xpath匹配操作)
import time(可进行程序运行时的时间操作)
二、确定目标静态网站及想爬取的信息
假如我们需要爬取豆瓣电影top250的电影名称,图片和简介链接。我们需要清楚豆瓣网是否有检测爬虫的手段,会不会影响爬虫正常运行。
豆瓣电影top250网址可输入为:

baseurl="https://movie.douban.com/top250?start={}"

保存地址是:
savepath = “豆瓣电影.xls”

豆瓣是有反爬手段的所以我们需要加入代码:

    headers={
     
        "User-Agent": "xx"
          }

头部信息可在浏览器中按F12,在Headers的Request Headers里查看,此为模拟浏览器登陆

三、对网页进行解析,爬取数据
网站里的250部电影发布在10页里,一页25部,以star=0开始第一页star=25开始第二页,代码可写为:

for i in range(0,10):
	url=baseurl.format(i*25)

应用urllib库获取网页数据并进行解码操作:

equest=urllib.request.Request(url,headers=head)
response=urllib.request.urlopen(request)
html=response.read().decode("utf-8")

使用bs4库解析数据:

soup=BeautifulSoup(html,"html.parser")

因为是一下子获取整个网页的全部数据,所以咱需要将这些信息分为25份处理并将信息转为str格式:

for item in soup.find_all('div',class_="item"):
            data=[] 
            item=str(item)

利用正则表达式爬取所需要的名称,图片和简介链接并将其保存在data里,结束第三步:

title=re.findall(re.compile(r'(.*?)'),item)[0].replace("/","")
data.append(title)
imgsrc=re.findall(re.compile(r',re.S),item)[0]
data.append(imgsrc)
link=re.findall(re.compile(r''),item)[0]
data.append(link)

注1.这里存的只是图片连接而非图片
注2.如若出现bug,可以考虑删掉某些[0]
注3.慎用sub

四、将数据保存在Excel中
确定存放位置,若位置里无该文件则会自动新建:

workbook = xlwt.Workbook(encoding="utf-8",style_compression=0)  #样式压缩
worksheet = workbook.add_sheet('sheet1',cell_overwrite_ok=True)  #允许覆盖
col=("标题","图片链接","内容链接")
for i in range(0,5):
        worksheet.write(0,i,col[i])   #列命名

存放内容,将图片另存在文件夹内:

    for i in range(0,250):
        print("第%d条"%(i+1))   #看进行度
        dat = data[i]
        for j in range(0,5):
            worksheet.write(i+1,j,dat[j])   #存数据
            if j==0:
                    response = requests.get(data2[j])
                    with open(r'xx\{}.jpg'.format(i), 'wb')as f:  # wb二进制写入
                        f.write(response.content)  # 存为二进制数据流
workbook.save(savepath)

五、另粗略介绍xpath方法
获取网站信息:

resp = requests.get(url=url,headers=head)

应用lxml库解析获得的信息(str):

data=etree.HTML(resp.text)

应用xpath手段定位目标内容:

a=data.xpath('//img/@src')

之后的处理方式与前文相同

你可能感兴趣的:(python,爬虫)