自学小白菜 发表于 2020-9-25 11:28:58

分享一下昨天写的爬虫代码


说明:
由于最近在忙着学校内的事情,所以并没有时间为大家添加更加细致的图片分析(就是具体的对网页的分析过程),请见谅,等有时间就会补上
这些案例,在写这条分享时测验过,可以成功,但是不保证能百分百成功(特别时自动签到的,因为只能实验一次,但是这次是成功了的,所以不敢打包票)



案列一:自动登录🐟c网站并签到
代码如下(写了算是比较清除的解释):
# -*- coding:utf-8 -*-
# Author: 自学小白菜

'''
说明:
需要的环境:
Chrome浏览器(谷歌浏览器)和chromedriver
第三方模块:selenium
'''

from selenium import webdriver
import time

#安装chromedriver的路劲
path = r'D:\CHROM\chrome\chromedriver.exe'

def sign_in(driver):
    #转到签到页面
    sign_url = driver.find_element_by_xpath('//li[@id="mn_Nac60"]/a').get_attribute('href') #获取’签到‘按钮的href属性
    driver.get(sign_url)
    time.sleep(2)
    # print(sign_url)

    #开始签到
    sign_button_tag = driver.find_element_by_id('JD_sign')
    sign_button_tag.click()
    print('签到成功')
    time.sleep(2)


def login(driver):
    url = 'https://fishc.com.cn/forum.php'
    driver.get(url)
    #测试是否能够返回正确html
    # print(driver.page_source)

    # #获取输入的tag和登录的按钮
    username_tag = driver.find_element_by_id('ls_username')
    password_tag = driver.find_element_by_id('ls_password')
    button_tag = driver.find_element_by_xpath('//button[@type="submit"]')

    #输入用户名和密码
    username = input('请输入用户名:')
    password = input('请输入密码:')

    #向输入框输入
    username_tag.send_keys(username)
    password_tag.send_keys(password)
    #确认登录
    button_tag.click()
    time.sleep(2)
    sign_in(driver)
    #测试用的,保存截图,证明登陆成功
    # time.sleep(5)
    # driver.save_screenshot('fishc.jpg')


def main():
    driver = webdriver.Chrome(executable_path=path)
    login(driver)


if __name__ == '__main__':
    main()


案例二:使用requests爬取一个壁纸网站
代码如下:
# -*- coding:utf-8 -*-
# Author: 自学小白菜
import requests
from lxml import etree
import time
from urllib import request

'''
所需库:
lxml
requests
'''

BASE_PATH='http://pic.netbian.com'

def parse_page(url):
    #标准的头部信息(我发现这个网站反爬虫做的并不是很厉害,好像不需要headers都可以爬)
    headers = {
      'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'
    }
    response = requests.get(url,headers=headers)
    #这里这个网站采取的gbk方式编码(可以在该网页处右击查看源码,搜索charset,里面就有它的编码方式)
    text = response.content.decode('gbk')
    #这里使用了xpath的解析方式,有兴趣的可以使用bs4或者正则
    html = etree.HTML(text)

    #获取图片的src属性,由于src只有部分,差了http://pic.netbian.com这一部分,所以后面会加上
    image_list = html.xpath('//img/@src')
    #删除无用图片,因为该网站的图片,有几张是没有用的,所以就删除了
    image_list.pop(-1)
    image_list.pop(-1)
    #获取图片标题
    title_list = html.xpath('//img/@alt')
    #删除一些不需要的标题,同图片一样,也是有一些不要的标题信息
    title_list.pop(0)
    title_list.pop(0)
    title_list.pop(0)
    title_list.pop(0)
    title_list.pop(-1)
    title_list.pop(-1)
    #测试是否正确
    # print(len(image_list),len(title_list))
   
    #zip是内置函数
    for value in zip(title_list,image_list):
      title,image = value
      image = BASE_PATH+image
      #urllib的request库中有一个专门下载图片等的函数,十分简便,就是urlretrieve,第一个参数是url,第二个是参数是存放的地址,这里我在其当前py文件夹下创建了images文件夹
      request.urlretrieve(image,'images/'+title+'.jpg')



def main():
    page = int(input('请输入需要爬取多少页:'))
    #因为第一页的url和第二页以后的url不同,所以单独处理
    urls = []
    nums = 0
    for i in range(1,page+1):
      if i == 1:
            url = 'http://pic.netbian.com/index.html'
      else:
            url = 'http://pic.netbian.com/index_{page_num}.html'.format(page_num=i)
      urls.append(url)
      parse_page(url) #分析网页的函数
      time.sleep(2)

if __name__ == '__main__':
    main()

案例三:登陆豆瓣并爬取生化危机(可指定)影评
# -*- coding:utf-8 -*-
# Author: 自学小白菜

import requests
from lxml import etree

def parse_page(session,url):
    #设置头部信息
    headers = {
      'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
      'Referer':'https://search.douban.com/movie/subject_search?search_text=shenghuaweiji+&cat=1002'
    }
    #获取response响应
    response = session.get(url,headers=headers)
    text = response.content.decode('utf-8')
    #测试用的
    # print(text)

    #下面使用xpath进行解析
    html = etree.HTML(text)
    review_list = html.xpath('//div[@class="main review-item"]')
    for review_tag in review_list:
      name_list = review_tag.xpath('.//header[@class="main-hd"]//a[@class="name"]/text()')
      content_list = review_tag.xpath('.//div[@class="main-bd"]//div[@class="short-content"]/text()')
      for content in content_list:
            print(content)


def get_comments(session):
    #豆瓣影评的url分析,这里爬取的是生化危机,大家可以自己修改url,就可以爬取其他电影了
    target_url = 'https://movie.douban.com/subject/1306809/reviews?start={page}'
    nums = int(input('请输入需要爬取多少页的影评:'))
    for i in range(0,nums):
      url = target_url.format(page=i*20)
      parse_page(session,url) #分析函数


def login():
    '''
    登录豆瓣
    :return: return session
    '''

    #获取session对象
    session = requests.Session()
    login_url = 'https://accounts.douban.com/j/mobile/login/basic'

    #设置头部信息
    headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
      'Referer': 'https://accounts.douban.com/passport/login_popup?login_source=anony'
    }
    #输入信息
    username = input('请输入用户名:')
    password = input('请输入密码:')

    #设置data属性
    data = {
      'name':username,
      'password':password,
      'remember':'false'
    }

    #尝试登陆
    try:
      response = session.post(login_url,headers=headers,data=data)
      text = response.content.decode('utf-8')
      print(text)
    except Exception as e:
      print('登录失败,原因是',e)

    #返回session对象
    return session

def main():
    session = login()
    get_comments(session)


if __name__ == '__main__':
    main()

自学小白菜 发表于 2020-9-26 00:30:53

补充一下:自动签到的没有考虑安全问题,主要是我没有设置安全问题。

Hdabo 发表于 2020-9-26 09:14:44

学习,学习了。。。。

happy含笑 发表于 2020-9-26 12:27:14

自为其主 发表于 2020-9-26 17:29:27

自学小白菜 发表于 2020-9-26 00:30
补充一下:自动签到的没有考虑安全问题,主要是我没有设置安全问题。

楼主我用的2012,复制进去怎么报错45个

自学小白菜 发表于 2020-9-26 20:54:35

自为其主 发表于 2020-9-26 17:29
楼主我用的2012,复制进去怎么报错45个

抱歉,最近有点忙,没有及时回复。
如果你有空的话,可以把你的错误信息发给我一下,我帮你看看

自学小白菜 发表于 2020-9-26 20:57:05

等我晚上有空了,把具体的步骤和截图重新发给大家。

互相学习{:10_275:}

自学小白菜 发表于 2020-9-26 23:49:38

大家如果对于自动登录不太懂,可以看看我新发的贴子,抽打游戏时间赶出来的。{:10_278:}

自学小白菜 发表于 2020-9-27 00:09:09

剩余的两个案例,看大家需不需要,如果需要就做一个详细的分析。

或则说大家还需要爬虫的案例,我还写了一些可以分享给大家,主要最近在把休闲时间来拿学爬虫,所以爬虫的案例多一点,有关于爬虫不懂的可以留言问我,大家一起进步{:10_332:}

自为其主 发表于 2020-9-27 17:04:58

自学小白菜 发表于 2020-9-26 20:54
抱歉,最近有点忙,没有及时回复。
如果你有空的话,可以把你的错误信息发给我一下,我帮你看看

木事,我又去学其他的拉,谢谢
页: [1]
查看完整版本: 分享一下昨天写的爬虫代码