鱼C论坛

 找回密码
 立即注册
查看: 3106|回复: 9

[技术交流] 分享一下昨天写的爬虫代码

[复制链接]
发表于 2020-9-25 11:28:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

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



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

  3. '''
  4. 说明:
  5. 需要的环境:
  6. Chrome浏览器(谷歌浏览器)和chromedriver
  7. 第三方模块:selenium
  8. '''

  9. from selenium import webdriver
  10. import time

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

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

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


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

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

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

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


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


  49. if __name__ == '__main__':
  50.     main()
复制代码


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

  7. '''
  8. 所需库:
  9. lxml
  10. requests
  11. '''

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

  13. def parse_page(url):
  14.     #标准的头部信息(我发现这个网站反爬虫做的并不是很厉害,好像不需要headers都可以爬)
  15.     headers = {
  16.         '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'
  17.     }
  18.     response = requests.get(url,headers=headers)
  19.     #这里这个网站采取的gbk方式编码(可以在该网页处右击查看源码,搜索charset,里面就有它的编码方式)
  20.     text = response.content.decode('gbk')
  21.     #这里使用了xpath的解析方式,有兴趣的可以使用bs4或者正则
  22.     html = etree.HTML(text)

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



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

  59. if __name__ == '__main__':
  60.     main()
复制代码


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

  3. import requests
  4. from lxml import etree

  5. def parse_page(session,url):
  6.     #设置头部信息
  7.     headers = {
  8.         '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',
  9.         'Referer':'https://search.douban.com/movie/subject_search?search_text=shenghuaweiji+&cat=1002'
  10.     }
  11.     #获取response响应
  12.     response = session.get(url,headers=headers)
  13.     text = response.content.decode('utf-8')
  14.     #测试用的
  15.     # print(text)

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


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


  31. def login():
  32.     '''
  33.     登录豆瓣
  34.     :return: return session
  35.     '''

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

  39.     #设置头部信息
  40.     headers = {
  41.         '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',
  42.         'Referer': 'https://accounts.douban.com/passport/login_popup?login_source=anony'
  43.     }
  44.     #输入信息
  45.     username = input('请输入用户名:')
  46.     password = input('请输入密码:')

  47.     #设置data属性
  48.     data = {
  49.         'name':username,
  50.         'password':password,
  51.         'remember':'false'
  52.     }

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

  60.     #返回session对象
  61.     return session

  62. def main():
  63.     session = login()
  64.     get_comments(session)


  65. if __name__ == '__main__':
  66.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-26 00:30:53 | 显示全部楼层
补充一下:自动签到的没有考虑安全问题,主要是我没有设置安全问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-26 09:14:44 | 显示全部楼层
学习,学习了。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2020-9-26 12:27:14 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

楼主我用的2012,复制进去怎么报错45个
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-26 20:54:35 | 显示全部楼层
自为其主 发表于 2020-9-26 17:29
楼主我用的2012,复制进去怎么报错45个

抱歉,最近有点忙,没有及时回复。
如果你有空的话,可以把你的错误信息发给我一下,我帮你看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-26 20:57:05 | 显示全部楼层
等我晚上有空了,把具体的步骤和截图重新发给大家。

互相学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-26 23:49:38 | 显示全部楼层
大家如果对于自动登录不太懂,可以看看我新发的贴子,抽打游戏时间赶出来的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-27 00:09:09 | 显示全部楼层
剩余的两个案例,看大家需不需要,如果需要就做一个详细的分析。

或则说大家还需要爬虫的案例,我还写了一些可以分享给大家,主要最近在把休闲时间来拿学爬虫,所以爬虫的案例多一点,有关于爬虫不懂的可以留言问我,大家一起进步
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

木事,我又去学其他的拉,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-27 17:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表