安装Navicat 15 for MySQL

Navicat 15 for MySQL可以让我们很方便的使用mysql数据库,但是他是收费的 我们要对他进行破解。
https://www.jb51.net/database/710931.html
图片.png
下载之后按照网站的安装说明进行安装破解(很详细的)

目标 url=https://weixin.sogou.com/weixin?query=%E6%9D%AD%E5%B7%9E+%E5%85%BC%E8%81%8C&_sug_type_=&sut=6012&lkt=0%2C0%2C0&s_from=input&_sug_=n&type=2&sst0=1603156914034&page=1&ie=utf8&w=01019900&dr=1

使用的库


  1. from selenium import webdriver
  2. import re
  3. import time
  4. import pymysql

创建五个变量在存储数据

  1. from selenium import webdriver
  2. import re
  3. import time
  4. import pymysql
  5. a = []#储存<h3>
  6. b = []#存储连接
  7. c = []#存储标题
  8. d = []#存储上传时间
  9. e = [] #存储公众号标题

我的思路是将一个页面的所有标题,连接,公众号时间,公众号分别储存在一个列表里面,最后用for循环储存在数据库里面

函数

打开网站,网页

打开网站:

  1. driver = webdriver.Firefox()
  2. #打开网页
  3. def _open_url(url):
  4. driver.get(url)
  5. return driver

找出

标签

找出

标签里面的代码将他们储存到a里面方便以后获得连接和标题
#找出网页对应的所有代码,我们可以发现我们所需要的连接和标题都在

标签里面

  1. #找出网页对应的所有代码,我们可以发现我们所需要的连接和标题都在<h3>标签里面
  2. def _daima_url(driver):
  3. html=driver.page_source
  4. for match in re.finditer(r'<h3>[\s\S]*?</h3>', html):
  5. a.append(match.group(0))
  6. return a


找链接

  1. def _lianjie(a):
  2. b.clear()
  3. #开始抽取连接
  4. for i in a:
  5. match = re.findall(r'href="[\s\S]*?"', i)
  6. ''' 这是我们用正则表达式抽取的其中一个连接
  7. href="/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS4UJUyG4CdQtlQ50A-U4nmqXKdZwBkox-lqXa8Fplpd9UMrPzlMkQDq4TCEtzURXCvi3H7xxSEkl-JXIku-Vr8hPysUpERqrov8akWylxUE-y9Dx_bXRFxgtI_PUHOXsw3gDvPu9Y18BUwUZluYyIj6f5F_7zfm6c022OAxAE8nigKdYty2vQnI1d42SewE1fQ5Qi7emTki5dk969PttsoUNGbbB75bUeA..&amp;type=2&amp;query=%E6%9D%AD%E5%B7%9E %E5%85%BC%E8%81%8C&amp;token=1BE302BE33C778027277C142D7F5300D72D97F725FA12570"
  8. 这是网站上的正确网页连接:
  9. https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS4UJUyG4CdQtlQ50A-U4nmqXKdZwBkox-lqXa8Fplpd9UMrPzlMkQDq4TCEtzURXCvi3H7xxSEkl-JXIku-Vr8hPysUpERqrov8akWylxUE-y9Dx_bXRFxgtI_PUHOXsw3gDvPu9Y18BUwUZluYyIj6f5F_7zfm6c022OAxAE8nigKdYty2vQnI1d42SewE1fQ5Qi7emTki5dk969PttsoUNGbbB75bUeA..&type=2&query=%E6%9D%AD%E5%B7%9E%20%E5%85%BC%E8%81%8C&token=1BE302BE33C778027277C142D7F5300D72D97F725FA12570
  10. 可以看出对比正确的连接其中有 amp 与正确的连接不同所欲我们要在开头加个https://weixin.sogou.com 以及把href= 和amp用replace替换掉
  11. '''
  12. # 清除href=" str(match[0]) 解释 因为match变量是一个列表 无法进行下一个正则匹配 我们要吧里面内容全部换成str类型才能匹配下一个正则
  13. result = re.sub('href="', "", str(match[0]))
  14. #清除amp;
  15. result2 = re.sub("amp;", "", result)
  16. #现在我们将正确连接储存到b中
  17. b.append('https://weixin.sogou.com'+result2)
  18. return b

找标题

  1. def _biaoti(a):
  2. c.clear()
  3. for i in a:
  4. result = re.findall(r"uigs=[\s\S]*?", i)
  5. '''这是正则匹配的结果uigs="article_title_4">【杭州兼职】180元/天,福利多多,西湖银泰果汁店招兼职啦!!
  6. 我们要去掉结果中的1.uigs="article_title_0">
  7. 2. 3.!--red_end-->
  8. '''
  9. #1.去除uigs=
  10. result1 = re.sub(r"uigs=[\S\s]*?>", "", str(result[0]))
  11. #2.去除result2 = re.sub("", "", result1)
  12. #3.去除!--red_end-->
  13. result3 = re.sub("", "", result2)
  14. #杭州兼职:10月30号杭州兼职发布 这是我们找到的标题结果 可以看到后面还有个 我们也给他去除掉 并将最后结果保存在result4中
  15. result4 = re.sub("", "", result3)
  16. #我们将正确的标题存储到c中
  17. c.append(result4)
  18. return c

找上传时间

  1. #上传时间
  2. def _shangchuantime(driver):
  3. #可以根据元素看起来上传时间都保存在class=“s2”的标签中 我们用selenium中的CSS查找元素找出所有的class=“s2”的元素并用for循环保存每一个
  4. #element.get_attribute('outerHTML') 是网页的源代码
  5. elements = driver.find_elements_by_css_selector('.s2')
  6. for element in elements:
  7. #2020-10-31
  8. #这是其中的一条 我们用找标题的方法将2020-10-31找出来
  9. result = re.findall(r"[\S\s]*?<", element.get_attribute('outerHTML'))
  10. result1 = re.sub("", "", str(result[0]))
  11. result2 = re.sub("<", "", result1)
  12. d.append(result2)
  13. return d

找公众号

  1. def _GZHtitle(driver):
  2. elements = driver.find_elements_by_css_selector('.account')
  3. '''新注册公众号'''
  4. #按照上述方法把标题找出来
  5. for element in elements:
  6. result0 = re.findall(r"uigs=[\S\s]*?<", element.get_attribute('outerHTML'))
  7. result1 = re.sub("</script>", "", str(result0[0]))
  8. result2 = re.sub(r"uigs=[\S\s]*?>", "", result1)
  9. result3 = re.sub("<", "", result2)
  10. e.append(result3)
  11. return e

**

保存数据

  1. def chucun(driver):
  2. a = _daima_url(driver)
  3. b = _lianjie(a) #结束后所有连接保存在b中
  4. c = _biaoti(a) #结束后所有标题保存在c中
  5. d = _shangchuantime(driver) #结束后所有上传时间保存在d中
  6. e = _GZHtitle(driver) #结束后所有公众号标题保存在e中


执行

  1. #因为我们要上传五页 所以要获取下一页的连接:
  2. def zhixing():
  3. url = 'https://weixin.sogou.com/weixin?query=杭州+兼职&sug_type=&sut=6012&lkt=0%2C0%2C0&s_from=input&sug=n&type=2&sst0=1603156914034&page=1&ie=utf8&w=01019900&dr=1'
  4. for k in range(5):
  5. driver = _open_url(url)
  6. chucun(driver)
  7. # 我们找到下一页的连接
  8. next_daima = driver.find_element_by_id("sogou_next")
  9. # 下一页连接的源代码
  10. next_url0 = re.search(r"href[\s\S]*?class", next_daima.get_attribute('outerHTML'))
  11. # 取出连接
  12. next_url1 = next_url0.group(0).replace('href="', "")
  13. next_url2 = 'https://weixin.sogou.com/weixin' + next_url1.replace('class', '')
  14. url = next_url2.replace('amp;', '')
  15. time.sleep(3)
  1. #使用print检查数据有没有问题
  2. #执行完第八个函数之后 我们可以在后面打赢出来abcde里面的内容以及数据数有没有出错,方便存储到数据库中的内容不会出错
  3. if __name__ == "__main__":
  4. zhixing()
  5. print(a)
  6. print(b)
  7. print(c)
  8. print(d)
  9. print(e)
  10. print(len(a))
  11. print(len(b))
  12. print(len(c))
  13. print(len(d))
  14. print(len(e))

这是print打印的结果,可以看出数据没有问题
图片.png

将数据上传到数据库中

  1. #最后设置main 将数据储存到数据库中 :
  2. if __name__ == "__main__":
  3. zhixing()
  4. db = pymysql.connect(host='localhost', user='root', password='', port=3306, db='wx兼职')
  5. cursor = db.cursor()
  6. sql = 'INSERT INTO pachong(标题,连接,公众号,时间) values(%s,%s,%s,%s)' for i in range(len(a)):
  7. for i in range(len(a)):
  8. try:
  9. cursor.execute(sql, (c[i], b[i], d[i], e[i]))
  10. db.commit()
  11. except:
  12. db.rollback()

数据库中的结果如下:
image.png
可以看到数据已经储存到数据库中。

导出数据库

右键选中需要导出数据库,点击转存SQL文件 根据自己要求选结构和数据 或者结构。
图片.png
我们将它转存到桌面上,点击保存
图片.png
点击开始,结束后关闭
图片.png
这样就在桌面上有个sql文件
图片.png

导入数据库

我们新建一个数据库导入
图片.png
选中导入右键点击运行SQL文件
图片.png
选中刚刚导出的文件,点击开始
图片.png
图片.png图片.png
可以看到成功了

完整代码

  1. #!/usr/bin/env python
  2. #encoding=utf-8
  3. from selenium import webdriver
  4. import re
  5. import time
  6. import pymysql
  7. a = []#储存<h3>
  8. b = []#存储连接
  9. c = []#存储标题
  10. d = []#存储上传时间
  11. e = [] #存储公众号标题
  12. driver = webdriver.Firefox()
  13. #打开网页
  14. def _open_url(url):
  15. driver.get(url)
  16. return driver
  17. #找出网页对应的所有代码,我们可以发现我们所需要的连接和标题都在<h3>标签里面
  18. def _daima_url(driver):
  19. html=driver.page_source
  20. for match in re.finditer(r'<h3>[\s\S]*?</h3>', html):
  21. a.append(match.group(0))
  22. return a
  23. def _lianjie(a):
  24. b.clear()
  25. #开始抽取连接
  26. for i in a:
  27. match = re.findall(r'href="[\s\S]*?"', i)
  28. '''
  29. 这是我们用正则表达式抽取的其中一个连接
  30. href="/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS4UJUyG4CdQtlQ50A-U4nmqXKdZwBkox-
  31. lqXa8Fplpd9UMrPzlMkQDq4TCEtzURXCvi3H7xxSEkl-JXIku-Vr8hPysUpERqrov8akWylxUE-y9Dx_bXRFxgtI_PUHOXsw3gDvPu9
  32. Y18BUwUZluYyIj6f5F_7zfm6c022OAxAE8nigKdYty2vQnI1d42SewE1fQ5Qi7emTki5dk969PttsoUNGbbB75bUeA..&amp;
  33. type=2&amp;query=%E6%9D%AD%E5%B7%9E %E5%85%BC%E8%81%8C&amp;token=1BE302BE33C778027277C142D7F5300D72D97F725FA12570"
  34. 这是网站上的正确网页连接:
  35. https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS4UJUyG4CdQtlQ50A-U4nmqXKdZwBk
  36. ox-lqXa8Fplpd9UMrPzlMkQDq4TCEtzURXCvi3H7xxSEkl-JXIku-Vr8hPysUpERqrov8akWylxUE-y9Dx_bXRFxgtI_PUHOXsw3gDvPu9Y18BUwUZluYy
  37. Ij6f5F_7zfm6c022OAxAE8nigKdYty2vQnI1d42SewE1fQ5Qi7emTki5dk969PttsoUNGbbB75bUeA..&type=2&query=%E6%9D%AD%E5%B7%9E%20%E5
  38. %85%BC%E8%81%8C&token=1BE302BE33C778027277C142D7F5300D72D97F725FA12570
  39. 可以看出对比正确的连接其中有 amp 与正确的连接不同
  40. 所欲我们要在开头加个https://weixin.sogou.com 以及把href= 和amp用replace替换掉
  41. '''
  42. # 清除href=" str(match[0]) 解释 因为match变量是一个列表 无法进行下一个正则匹配 我们要吧里面内容全部换成str类型才能匹配下一个正则
  43. result = re.sub('href="', "", str(match[0]))
  44. #清除amp;
  45. result2 = re.sub("amp;", "", result)
  46. #现在我们将正确连接储存到b中
  47. b.append('https://weixin.sogou.com'+result2)
  48. return b
  49. def _biaoti(a):
  50. c.clear()
  51. for i in a:
  52. result = re.findall(r"uigs=[\s\S]*?</a>", i)
  53. '''这是正则匹配的结果uigs="article_title_4">【<em><!--red_beg-->杭州<!--red_end--></em><em><!--red_beg-->兼职<!--red_end--></em>】180元/天,福利多多,西湖银泰果汁店招<em><!--red_beg-->兼职<!--red_end--></em>啦!!</a>
  54. 我们要去掉结果中的1.uigs="article_title_0">
  55. 2. <em><!--red_beg-->
  56. 3.!--red_end--></em>
  57. '''
  58. #1.去除uigs=
  59. result1 = re.sub(r"uigs=[\S\s]*?>", "", str(result[0]))
  60. #2.去除<em><!--red_beg-->
  61. result2 = re.sub("<em><!--red_beg-->", "", result1)
  62. #3.去除!--red_end--></em>
  63. result3 = re.sub("<!--red_end--></em>", "", result2)
  64. #杭州兼职:10月30号杭州兼职发布</a> 这是我们找到的标题结果 可以看到后面还有个</a> 我们也给他去除掉 并将最后结果保存在result4中
  65. result4 = re.sub("</a>", "", result3)
  66. #我们将正确的标题存储到c中
  67. c.append(result4)
  68. return c
  69. #上传时间
  70. def _shangchuantime(driver):
  71. #可以根据元素看起来上传时间都保存在class=“s2”的标签中 我们用selenium中的CSS查找元素找出所有的class=“s2”的元素并用for循环保存每一个
  72. #element.get_attribute('outerHTML') 是网页的源代码
  73. elements = driver.find_elements_by_css_selector('.s2')
  74. for element in elements:
  75. #<span class="s2"><script>document.write(timeConvert('1604116776'))</script>2020-10-31</span>
  76. #这是其中的一条 我们用找标题的方法将2020-10-31找出来
  77. result = re.findall(r"</script>[\S\s]*?<", element.get_attribute('outerHTML'))
  78. result1 = re.sub("</script>", "", str(result[0]))
  79. result2 = re.sub("<", "", result1)
  80. d.append(result2)
  81. return d
  82. def _GZHtitle(driver):
  83. elements = driver.find_elements_by_css_selector('.account')
  84. '''<a class="account" target="_blank" id="sogou_vr_11002601_account_0"
  85. i="oIWsFtwbeMFIKOgK8nuArz_EksWM" href="/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6EzDJysI4ql5MPrOUp16838dGRMI7NnPqegdDsEEUfwxJ
  86. fbo_1k2jXwwvDqyjOWdzlnYNyriFsra1h9rKze6a5FPJVhXd9I6T2oHKKEQvt75xK-LDdHU3y3rkjQPCoG-HYPFUO-m3Et7MbjmlZHQtxtzicJFaDsgndtFozGog2DMQ
  87. 3inJVxe2HeO00efWrWmm&amp;type=2&amp;query=%E6%9D%AD%E5%B7%9E %E5%85%BC%E8%81%8C&amp;token=29AB8EC921851BFD888D34D3115F268D888B7C
  88. 9C5FA380A7"
  89. data-headimage="http://wx.qlogo.cn/mmhead/Q3auHgzwzM4CEQDjyTsWh9WvXTXYdSnzTUF4pdY9OnogEa9iccUzLibQ/0" data-isv="0"
  90. uigs="article_account_0">新注册公众号</a>'''
  91. #按照上述方法把标题找出来
  92. for element in elements:
  93. result0 = re.findall(r"uigs=[\S\s]*?<", element.get_attribute('outerHTML'))
  94. result1 = re.sub("</script>", "", str(result0[0]))
  95. result2 = re.sub(r"uigs=[\S\s]*?>", "", result1)
  96. result3 = re.sub("<", "", result2)
  97. e.append(result3)
  98. return e
  99. def chucun(driver):
  100. a = _daima_url(driver)
  101. b = _lianjie(a) #结束后所有连接在b中
  102. c = _biaoti(a) #结束后所有标题在c中
  103. d = _shangchuantime(driver) #结束后所有上传时间在d中
  104. e = _GZHtitle(driver) #结束后所有公众号标题在e中
  105. def zhixing():
  106. url = 'https://weixin.sogou.com/weixin?query=%E6%9D%AD%E5%B7%9E+%E5%85%BC%E8%81%8C&_sug_type_=&sut=6012&lkt=0%2C0%2C0&s_from=input&_sug_=n&type=2&sst0=1603156914034&page=1&ie=utf8&w=01019900&dr=1'
  107. for k in range(5):
  108. driver = _open_url(url)
  109. chucun(driver)
  110. # 我们找到下一页的连接
  111. next_daima = driver.find_element_by_id("sogou_next")
  112. # 下一页连接的源代码
  113. next_url0 = re.search(r"href[\s\S]*?class", next_daima.get_attribute('outerHTML'))
  114. # 取出连接
  115. next_url1 = next_url0.group(0).replace('href="', "")
  116. next_url2 = 'https://weixin.sogou.com/weixin' + next_url1.replace('class', '')
  117. url = next_url2.replace('amp;', '')
  118. time.sleep(3)
  119. if __name__ == "__main__":
  120. zhixing()
  121. db = pymysql.connect(host='localhost', user='root', password='', port=3306, db='wx兼职')
  122. cursor = db.cursor()
  123. sql = 'INSERT INTO pachong(标题,连接,公众号,时间) values(%s,%s,%s,%s)'
  124. for i in range(len(a)):
  125. try:
  126. cursor.execute(sql, (c[i], b[i], d[i], e[i]))
  127. db.commit()
  128. except:
  129. db.rollback()

py文件

微信公众号.py