https://xiaoyuan.zhaopin.com/full/jobs
直接复制审查的内容,或者html
- 我们需要找到一个合适的网址,例如:https://xiaoyuan.zhaopin.com/full/jobs ,审查之后在源代码找到相应的位置,最好是一行的源代码,不进行跨行的。
image.png -
方格类型,不是椭圆类型,椭圆类型源代码跨行需要在python语句后面增加内容,后面进行补充。
image.png
2.1 对比看出结果
image.png -
找的元素不是义务加载的,以下
image.png - 在使用python爬虫爬取数据的时候,经常会遇到一些网站的反爬虫措施,一般就是针对于headers中的User-Agent,如果没有对headers进行设置,User-Agent会声明自己是python脚本,而如果网站有反爬虫的想法的话,必然会拒绝这样的连接。而修改headers可以将自己的爬虫脚本伪装成浏览器的正常访问,来避免这一问题。
5.re.S的作用
https://www.jb51.net/article/146384.htm
作者:Tank丶Farmer
链接:https://www.jianshu.com/p/97b081534d7e
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。 - 正则表达式中,“.”的作用是匹配除“\n”以外的任何字符,也就是说,它是在一行中进行匹配。这里的“行”是以“\n”进行区分的。a字符串有每行的末尾有一个“\n”,不过它不可见。
如果不使用re.S参数,则只在每一行内进行匹配,如果一行没有,就换下一行重新开始,不会跨行。而使用re.S参数以后,正则表达式会将这个字符串作为一个整体,将“\n”当做一个普通的字符加入到这个字符串中,在整体中进行匹配。
第一次程序
import requests
import re
headers ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
url=url='https://xiaoyuan.zhaopin.com/full/jobs'
https://xiaoyuan.zhaopin.com/full/jobs'
res = requests.get(url,headers=headers)
names=re.findall('<p class="searchResultCompanyname"><span>(.*?)</span></p>',res.text)
places=re.findall('<span>城市:<em class="searchResultJobCityval">(.*?)</em></span>',res.text)
peoples=re.findall('<span>人数:<em class="searchResultJobPeopnum">(.*?)</em></span>',res.text)
types=re.findall('<span>公司类型:<em>(.*?)</em></span>',res.text)
print(name,place,people,type)
一.正则
- 首先引入库
import requests
import re #正则库
import csv #保存csv文件调用的库
- 写入headers,防止封掉IP
headers ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
-
输入爬取的地址url,并且用res,可以自定义红色位置,def功能与后面存入csv联系起来用。单纯输出不需要定义函数。
image.png
url='https://xiaoyuan.zhaopin.com/full/jobs'
res = requests.get(url,headers=headers)
-
审查之后,找到爬取的代码,copy html,在源代码中找到,一步一输出,判断查找的是否正确,。
yi'bu'yi'shu'chu
一、 引入存入csv功能
-
在上述基础上定义函数,并对以下内容进行缩进
image.png - 加入for循环,使用writer.writerow,
types=re.findall('<span>公司类型:<em>(.*?)</em></span>',res.text)
for name,place,people,type in zip(names,places,peoples,types):
print(name,place,people,type)
writer.writerow([name,place,people,type])
image.png
- 加入以下内容,并对url进行改动,或者删除注释部分,在下面重新添加,但是添加的网址需要能够显示换页功能,即右侧箭头指向。
if __name__ == '__main__':
fp = open('C:/Users/秦振凯/Desktop/text.csv', 'w', encoding='utf-8', newline='')
writer = csv.writer(fp)
writer.writerow(['name', 'place', 'people','type'])
urls = ['https://xiaoyuan.zhaopin.com/full/jobs/0_0_0_0_0_-1_0_{}_0'.format(str(i)) for i in range(0, 60, 30)]
for url in urls:
get_info(url)
image.png
import requests
import re
import csv
headers ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
# url='https://xiaoyuan.zhaopin.com/full/jobs'
def get_info(url):
res = requests.get(url,headers=headers)
names=re.findall('<p class="searchResultCompanyname"><span>(.*?)</span></p>',res.text)
places=re.findall('<span>城市:<em class="searchResultJobCityval">(.*?)</em></span>',res.text)
peoples=re.findall('<span>人数:<em class="searchResultJobPeopnum">(.*?)</em></span>',res.text)
types=re.findall('<span>公司类型:<em>(.*?)</em></span>',res.text)
for name,place,people,type in zip(names,places,peoples,types):
print(name,place,people,type)
writer.writerow([name,place,people,type])
if __name__ == '__main__':
fp = open('C:/Users/秦振凯/Desktop/text.csv', 'w', encoding='utf-8', newline='')
writer = csv.writer(fp)
writer.writerow(['name', 'place', 'people','type'])
urls = ['https://xiaoyuan.zhaopin.com/full/jobs/0_0_0_0_0_-1_0_{}_0'.format(str(i)) for i in range(0, 60, 30)]
for url in urls:
get_info(url)
网友评论