小白爬虫综合项目1

项目1:搜狗知乎,爬取指定存储上一级目录的名字,以及存储爬取的页码

项目2:爬取某用户的豆瓣网的个人主页页面数据

项目3:goubanjia应用爬取ip这个关键词的页面

项目4: 爬取糗事百科首页的图片&&升级

项目5:爬取段子网

项目6:爬取古诗文网的三国这篇小说

项目7:selenium

项目8:豆瓣电影分类排行榜==>喜剧片

 

项目1:搜狗知乎,爬取指定存储上一级目录的名字,以及存储爬取的页码

#爬取前三页数据
import requests
import os
file_name=input('请输入一个文件名:')
#创建一个文件夹
if not os.path.exists(f'./{file_name}'):
    os.mkdir(f'./{file_name}')
word=input('enter a search word:')
#动态指定页码的范围
start_pageNum=int(input('enter a start pageNum'))
end_pageNum=int(input('enter a end pageNum'))

#自定义请求头信息
headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
url='https://www.sogou.com/sogou'
for page in range(start_pageNum,end_pageNum+1):
    params={
        'query':word,
        'page':page,
        'ie':'utf-8',
        'insite':'zhihu.com'
    }
    response=requests.get(url=url,params=params,headers=headers)
    #获取响应中的页面数据(指定页码(page))
    page_text=response.text
    
    #进行持久化存储
    fileName=word+str(page)+'.html'
    filePath=f'./{file_name}/'+fileName
    with open(filePath,'w',encoding='utf-8')as fp:
        fp.write(page_text)
        print('第%d页数据写入成功'%page)

 

项目2:爬取某用户的豆瓣网的个人主页页面数据

import requests

session=requests.session()
#1.发起登录请求:将cookie获取,且存储到session对象中
login_url='https://accounts.douban.com/j/mobile/login/basic'
data={
    'ck': '',
    'name': '17862982790',
    'password': 'spc121314',
    'remember': 'false',
    'ticket': '',
}

#2.自定义请求头信息
headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}

#3.使用session发起post 请求获取cookie,我们不需要响应页面的数据,因此不需要获取
login_response = session.post(url=login_url,data=data,headers=headers)

#4.找到个人主页对应的url,对个人主页发起请求(session(cookie)),获取响应页面数据
url='https://www.douban.com/people/198409299/'
response=session.get(url=url,headers=headers)
page_text=response.text

with open('./douban110.html','w',encoding='utf-8') as fp:
    fp.write(page_text)

 项目3:goubanjia应用爬取ip这个关键词的页面

import requests
url = 'https://www.baidu.com/s?wd=ip&ie=utf-8'

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}

#将代理ip封装到字典
proxy = {
    'http':'39.137.77.66:8080'
}
#更换网路IP
response=requests.get(url=url,proxies=proxy,headers=headers)

with open('./daili.html','w',encoding='utf-8')as fp:
    fp.write(response.text)

 项目4: 爬取糗事百科首页的图片

import os
import requests
import re
#1.指定url
url='https://www.qiushibaike.com/pic/'

#2.自定义请求头信息
headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
#3.发起请求
response=requests.get(url=url,headers=headers)
#4.获取页面数据
page_text=response.text
# 5.数据解析(该列表中存储的就是当前页面源码中所有的图片链接)
img_list=re.findall('<div class="thumb">.*?<img src="(.*?)".*?>.*?</div>',page_text,re.S)
# print(img_list)

#创建一个存储图片数据的文件夹
if not os.path.exists('./imgs'):
    os.mkdir('imgs')

for url in img_list:
    img_url='https:'+url
    img_data=requests.get(url=img_url,headers=headers).content     #请求图片
    imgName=url.split('/')[-1]
    imgPath='imgs/'+imgName
    with open(imgPath,'wb') as fp:
        fp.write(img_data)
        print(imgName+'写入成功')

升级指定爬取:思考可不可以将爬取到的图片进行分成第几页处理

import os
import requests
import re

#创建一个存储图片数据的文件夹
file_name=input('请输入一个文件名:')
#创建一个文件夹
if not os.path.exists(f'./{file_name}'):
    os.mkdir(f'./{file_name}')
#动态指定页码的范围
start_pageNum=int(input('enter a start pageNum'))
end_pageNum=int(input('enter a end pageNum'))

#1.指定url
url='https://www.qiushibaike.com/pic/'

for page in range(start_pageNum,end_pageNum+1):
    #https://www.qiushibaike.com/pic/page/6/?s=5204493

    url=f'https://www.qiushibaike.com/pic/page/{page}/?s=5204493'
    #2.自定义请求头信息
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    }
    #3.发起请求
    response=requests.get(url=url,headers=headers)
    #4.获取页面数据
    page_text=response.text
    # 5.数据解析(该列表中存储的就是当前页面源码中所有的图片链接)
    img_list=re.findall('<div class="thumb">.*?<img src="(.*?)".*?>.*?</div>',page_text,re.S)
    # print(img_list)

    for url in img_list:
        img_url='https:'+url
        img_data=requests.get(url=img_url,headers=headers).content     #请求图片
        imgName=url.split('/')[-1]
        imgPath=f'./{file_name}/'+imgName
        with open(imgPath,'wb') as fp:
            fp.write(img_data)
            print(imgName+'写入成功')

 项目5:爬取段子网

with方式:

import requests
from lxml import etree

#1.指定url
url='https://ishuo.cn/'
# 2.发起请求
headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
response=requests.get(url=url,headers=headers)
#3.获取页面内容
page_text=response.text
#4.数据解析
tree=etree.HTML(page_text)
#获取所有的li标签(段子内容和标题都被包含在li标签中)
li_list=tree.xpath('//div[@id="list"]/ul/li')
#注意:Element类型的对象可以继续调用xpath函数,对该对象表示的局部内容进行指定内容的解析
with open('./段子2.txt','w',encoding='utf-8') as fp:
    for li in li_list:
        content=li.xpath('./div[@class="content"]/text()')[0]
        title=li.xpath('./div[@class="info"]/a/text()')[0]
        #5.持久化
        fp.write(title+":"+content+"\n\n")
print("数据写入成功")

方式2:fp

import requests
from lxml import etree

#1.指定url
url='https://ishuo.cn/'
# 2.发起请求
headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
response=requests.get(url=url,headers=headers)
#3.获取页面内容
page_text=response.text
#4.数据解析
tree=etree.HTML(page_text)
#获取所有的li标签(段子内容和标题都被包含在li标签中)
li_list=tree.xpath('//div[@id="list"]/ul/li')

#注意:Element类型的对象可以继续调用xpath函数,对该对象表示的局部内容进行指定内容的解析
fp = open('./段子3.txt','w',encoding='utf-8')
for li in li_list:
    content=li.xpath('./div[@class="content"]/text()')[0]
    title=li.xpath('./div[@class="info"]/a/text()')[0]
    #5.持久化
    fp.write(title+":"+content+"\n\n")
print("数据写入成功")
fp.close()

项目6:爬取古诗文网的三国这篇小说

import requests
from bs4 import BeautifulSoup
# 1.指定url
url='http://www.shicimingju.com/book/sanguoyanyi.html'
# 2.发起请求
headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
#根据url获取页面内容中指定的标题所对应的文章内容
def get_content(url):
    content_page=requests.get(url=url,headers=headers).text
    soup=BeautifulSoup(content_page,'lxml')  #汤对象
    div=soup.find('div',class_='chapter_content')
    return div.text

page_text=requests.get(url=url,headers=headers).text
#数据解析
soup=BeautifulSoup(page_text,'lxml')
a_list=soup.select('.book-mulu > ul > li > a')
# type(a_list[0])    
# a_list
fp=open('./sanguo.txt','w',encoding='utf-8')
for a in a_list:
    title=a.string
    #获取章节的标题
    content_url='http://www.shicimingju.com'+a['href']
    #获取章节的内容
    print(content_url)
    content=get_content(content_url)
    fp.write(title+':'+content+"\n\n\n")
    print('写完1条')
print("写完")

项目7:selenium

我的google浏览器版本号是86,因此我选择最新的驱动2.46

anaconda下安装selenium以及驱动安装: https://blog.csdn.net/hrainning/article/details/83684147

将驱动和爬虫文件放在同一文件夹下面

打开百度浏览器:

#编码流程
from selenium import webdriver
#创建一个浏览器对象 executable_path驱动的路径
bro=webdriver.Chrome(executable_path='./chromedriver')
#get方法可以指定一个url,让浏览器进行请求
bro.get('https://www.baidu.com')

 让百度执行一个词条的搜索:

#编程流程:
from selenium import webdriver
from time import sleep
#创建一个浏览器对象executable_path驱动的路径
bro=webdriver.Chrome(executable_path='./chromedriver')
#get方法可以指定一个url,让浏览器进行请求
bro.get('https://www.baidu.com')
sleep(1)
#让百度进行指定词条的一个搜索
text=bro.find_element_by_id('kw')    #定位到了text文本框
text.send_keys('美元')               #表示向文本框中录入指定内容
sleep(1)
button=bro.find_element_by_id('su')
button.click() #click表示的是点击操作
sleep(3)
bro.quit()   #关闭浏览器

 无头浏览器的处理:

#编程流程:
from selenium import webdriver
bro=webdriver.PhantomJS(executable_path=r'C:\Users\Administrator\Downloads\phantomjs-2.1.1-windows\bin\phantomjs.exe')

#打开浏览器
bro.get('https://www.baidu.com')
#截屏
bro.save_screenshot('./1.png')
text=bro.find_element_by_id('kw')    #定位到了text文本框
text.send_keys('日元')              #表示向文本框中录入指定内容

bro.save_screenshot('./2.png')
bro.quit()

 项目8:豆瓣电影分类排行榜==>喜剧片

#编程流程:
from selenium import webdriver
from time import sleep
bro=webdriver.PhantomJS(executable_path=r'C:\Users\Administrator\Downloads\phantomjs-2.1.1-windows\bin\phantomjs.exe')
url='https://movie.douban.com/typerank?type_name=%E5%96%9C%E5%89%A7%E7%89%87&type=24&interval_id=100:90&action='
bro.get(url)
sleep(1)
#截屏
bro.save_screenshot('./98.png')
#编写jsdiamante:让页面中的滚轮向下滑动(底部)
js='window.scrollTo(0,document.body.scrollHeight)'
#如何让浏览器对象执行js代码
bro.execute_script(js)
sleep(1)
#截屏
bro.save_screenshot('./99.png')
#获取加载数据后的页面:page_source获取浏览器当前的页面数据
page_text=bro.page_source
print(page_text)

 

posted @ 2019-06-23 19:31  studybrother  阅读(271)  评论(0编辑  收藏  举报