【Python】从0开始写爬虫——扒狗东先流产了
上回写到一半临时有事,竟然没有保存到!!!。这几天也是因为家人过来玩。。我也不知道写到哪儿了。我发现狗东这个奸贼很多数据是请求请求再请求,然后才拿到我们看到的数据显示上去的。我尝试了一下找齐这个数据确实有点头疼(我有查到可以用一个东西模拟浏览器去得到我们最终的页面,但是本着练习为主的思想,先不搞这么无脑的东西)。
所以我们暂时先战略性放弃扒狗东。容我再找个好扒一点网站。下面是现在的代码。
这里给出一个BeautifulSoup的文档链接,是中文的,很好懂: BeautifulSoup中文文档
emmmm我们先上京东找个好看的模特: 恋裳蒂莎2018夏季夜场小女人性感后开叉包臀连衣裙紧身诱人主播超短裙 黑色 S
根据我现在的代码,我应该是封装了一下之前的代码,然后已经爬了商品的id、名称和类目。
目录。我不太懂规范的python项目是什么样的。我是在test目录下中测试一些第三方库的api
app.py
import urllib.request from bs4 import BeautifulSoup header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36' } # 因为有时候得到的是一段 json 或者别的数据,有时候是html,所以我们单纯地先获取数据 def get_data(url, headers=header, charset="utf-8"): req = urllib.request.Request(url=url, headers=headers) rep = urllib.request.urlopen(req) data = rep.read() return data.decode(encoding=charset) # 如果是个html我们就可以用BeautifulSoup解析 def get_soup(url, headers=header, charset="utf-8"): data = get_data(url=url, headers=headers, charset=charset) return BeautifulSoup(data, "html.parser")
jd.py
from scrapy import app import re header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36' # 'Referer': 'https://item.jd.com/10671563387.html' } url = "https://item.jd.com/27934623028.html" soup = app.get_soup(url, header, "gbk") # 获取BeautifulSoup对象 pid = re.search("[0-9]+", url).group() # 用正则筛选id print("商品id:", pid) title = soup.find("div", class_="sku-name").string.strip() # 爬商品名称 print("商品名称:", title) page_config = soup.find("script", {"charset": "gbk"}).string cat = re.search("(?<=cat:\s\[)[,0-9]*(?=\])", page_config).group() # 用正则匹配到商品类目 print("category: ", cat)
控制台输出。说明是可以爬到这些的

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java并发面试题精选
1,什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。 2,线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。每个线程都拥有单独的栈内存用来存储本地数据。 3,如何在Java中实现线程? 两种方式:java.lang.Thread 类的实例就是一个线程但是它需要调用java.lang.Runnable接口来执行,由于线程类本身就是调用的Runnable接口所以你可以继承java.lang.Thread 类或者直接调用Runnable接口来重写run()方法实现线程。 4,Java 关键字volatile 与 synchronized 作用与区别? 1,volatile 它所修饰的变量不保留拷贝,直接访问主内存中的。 在Java内存模型中,有main memory,每个线程也有自...
- 下一篇
关于Git提交规范
自古至今,无规矩不成方圆。 Git提交也有其规范,业内做的比较好的,比较具有参考价值的就是Angular的提交。 Angular提交规范: <type>(<scope>): <subject> #header // 空一行 <body> // 空一行 <footer> 格式讲解 Header Header部分只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)。 总的来说,关键就是header这部分,至于<body>和<footer>可省略 例如: feat:新增财务报表 type 用于说明本次commit的类别,只允许使用下面7个标识 feat:新功能(feature) fix:修补bug docs:文档(documentation) style: 格式(不影响代码运行的变动) refactor:重构(即不是新增功能,也不是修改bug的代码变动) test:增加测试 chore:构建过程或辅助工具的变动 注意:如果type为feat和fix,则该 commit 将肯...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS关闭SELinux安全模块
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境
- 设置Eclipse缩进为4个空格,增强代码规范