牵手丶若相惜 发表于 2019-11-24 14:53

python爬虫,爬取58同城数据

本帖最后由 牵手丶若相惜 于 2019-11-27 19:32 编辑

仅限学习!仅限学习!!仅限学习!!!
为了爬虫不影响别人的服务器我每爬取一页等待了3秒 这是必要的
评分!!!评分!!!评分!!!谢谢{:301_975:}
——————————————————————
有个帖子 被人说发现了错误 才发现【i】会被转义
发帖有的地方被转义成了字体   divs1【i】

现在我把divs1【i】改成了divs1
(只能用中文的中括号 来告诉你们那里错了 不然还会被转义)
——————————————————————
没什么反爬机制 比较简单
爬取的是58同城的小时工的数据,因为小时工的数据比较多
我就爬取了70页,具体小时工的数据多少页不知道
虽然上面只显示了70页,但是你可以通过在地址上添加页数来超过70页 具体的看下面的图片
数据重不重复我不知道,因为每次刷新数据都不同
一定要在headers里面添加上referer 不然爬几页过后,后面的都是空的 不知道是反爬机制 还是正则表达式的问题
具体的没实验 因为我最开始用的是正则来匹配的数据 后面发现太乱,而且有空数据 又改为BeautifulSoup来匹配的
在Title_get函数里有一句判断字符是否是广告,原因在图里
异常处理你加不加都可以 但是我第二次爬取的时候 报了一个异常 但是后面没再报 想想还是加上


代码如下:
import requests
import time
from bs4 import BeautifulSoup

# 浏览器代{过}{滤}理
headers = {
    "user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36",
    "referer": "https://sz.58.com/job/pn1/?key=%E5%B0%8F%E6%97%B6%E5%B7%A5&cmcskey=%E5%B0%8F%E6%97%B6%E5%B7%A5&final=1&jump=1&specialtype=gls&classpolicy=main_A,job_A&ClickID=1"
}

# 网页后缀
parameters = {
    "key": "%E5%B0%8F%E6%97%B6%E5%B7%A5",
    "cmcskey": "%E5%B0%8F%E6%97%B6%E5%B7%A5",
    "final": "1",
    "jump": "1",
    "specialtype": "gls",
    "classpolicy": "main_A,job_A",
    "ClickID": "1"
}
# 筛选内容
def Title_get(li):
    divs1 = list(li.find("div", class_="item_con job_title").stripped_strings)
    with open("d:/58小时工.txt","a") as fp:
      fp.write(("标题:"+divs1[0]+divs1[1]+divs1[2]+"\t"))
      fp.write(("工资:"+divs1[3]+divs1[4]+"\t"))
      fp.write("待遇:")
      for x in range(5,len(divs1)):
            # 判断字符串里是否有"广告"
            if divs1 != "广告":
                fp.write(divs1+",")
      fp.write("\n")

if __name__ == '__main__':
    # 页码
    for i in range(1,71):
      if i >=2:
            headers["referer"] = "https://sz.58.com/job/pn"+str(i-1)+"/?key=%E5%B0%8F%E6%97%B6%E5%B7%A5&cmcskey=%E5%B0%8F%E6%97%B6%E5%B7%A5&final=1&jump=1&specialtype=gls&classpolicy=main_A,job_A&ClickID=1"
      # 异常处理
      try:
            data = requests.get("https://sz.58.com/job/pn1" , headers=headers, params=parameters).text
            soup = BeautifulSoup(data, "html5lib")
            lis = soup.find_all("li",class_="job_item clearfix")
            for li in lis:
                Title_get(li)
            # 每爬取一页 等待3秒
            time.sleep(3)
      except:
            continue


cj13888 发表于 2019-11-24 15:21

太感谢了,正需要这个呢。谢谢!

boyanuir 发表于 2020-2-9 23:26

z1mu 发表于 2019-11-25 10:50
爬虫违法的……

爬虫违不违法,主要看爬取的内容及用途,目前爬取个人私密信息用于商业用途是违法的,比如51信用卡案件,一般正常爬取网上公布的非个人信息,不构成犯罪,详细你可以看下2019年5月份网信办发布的 数据管理办法征集稿。

xzgjswb 发表于 2019-11-24 15:07

感谢楼主的分享

redstking 发表于 2019-11-24 15:19

学习一下思路,感谢分享

Tralee 发表于 2019-11-24 15:32

谢谢分享

RedLips彡 发表于 2019-11-24 15:39

学习大佬

lzdj2015 发表于 2019-11-24 15:49

软件发布出来就好了

傻呆呆 发表于 2019-11-24 16:19

爬邮箱呢

jimmy160 发表于 2019-11-24 17:18

感谢分享,辛苦了

狂暴小钊 发表于 2019-11-24 23:20

虽然不需要 还是谢谢楼主分享我也在学习爬虫就是想爬58用户数据 我是做招商的
页: [1] 2 3
查看完整版本: python爬虫,爬取58同城数据